Fixed tablespace assignment in index with WITH clause
Reported by Beena Emerson.
This commit is contained in:
parent
f886e0dba6
commit
cc2abf4b25
@ -13,6 +13,7 @@ SELECT spcname FROM pg_tablespace WHERE spcname = 'testts';
|
|||||||
-- If the query above failed you must create the 'testts' tablespace;
|
-- If the query above failed you must create the 'testts' tablespace;
|
||||||
CREATE TABLE testts1 (id serial primary key, data text);
|
CREATE TABLE testts1 (id serial primary key, data text);
|
||||||
CREATE INDEX testts1_partial_idx on testts1 (id) where (id > 0);
|
CREATE INDEX testts1_partial_idx on testts1 (id) where (id > 0);
|
||||||
|
CREATE INDEX testts1_with_idx on testts1 (id) with (fillfactor=80);
|
||||||
INSERT INTO testts1 (data) values ('a');
|
INSERT INTO testts1 (data) values ('a');
|
||||||
INSERT INTO testts1 (data) values ('b');
|
INSERT INTO testts1 (data) values ('b');
|
||||||
INSERT INTO testts1 (data) values ('c');
|
INSERT INTO testts1 (data) values ('c');
|
||||||
@ -71,7 +72,8 @@ ORDER BY relname;
|
|||||||
testts1 | testts
|
testts1 | testts
|
||||||
testts1_partial_idx | testts
|
testts1_partial_idx | testts
|
||||||
testts1_pkey | testts
|
testts1_pkey | testts
|
||||||
(3 rows)
|
testts1_with_idx | testts
|
||||||
|
(4 rows)
|
||||||
|
|
||||||
-- can't specify --moveidx without --tablespace
|
-- can't specify --moveidx without --tablespace
|
||||||
\! pg_repack --dbname=contrib_regression --no-order --table=testts1 --moveidx
|
\! pg_repack --dbname=contrib_regression --no-order --table=testts1 --moveidx
|
||||||
|
@ -11,6 +11,7 @@ SELECT spcname FROM pg_tablespace WHERE spcname = 'testts';
|
|||||||
|
|
||||||
CREATE TABLE testts1 (id serial primary key, data text);
|
CREATE TABLE testts1 (id serial primary key, data text);
|
||||||
CREATE INDEX testts1_partial_idx on testts1 (id) where (id > 0);
|
CREATE INDEX testts1_partial_idx on testts1 (id) where (id > 0);
|
||||||
|
CREATE INDEX testts1_with_idx on testts1 (id) with (fillfactor=80);
|
||||||
INSERT INTO testts1 (data) values ('a');
|
INSERT INTO testts1 (data) values ('a');
|
||||||
INSERT INTO testts1 (data) values ('b');
|
INSERT INTO testts1 (data) values ('b');
|
||||||
INSERT INTO testts1 (data) values ('c');
|
INSERT INTO testts1 (data) values ('c');
|
||||||
|
20
lib/repack.c
20
lib/repack.c
@ -346,6 +346,24 @@ skip_const(Oid index, char *sql, const char *arg1, const char *arg2)
|
|||||||
return parse_error(index);
|
return parse_error(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
skip_until_const(Oid index, char *sql, const char *what)
|
||||||
|
{
|
||||||
|
char *pos;
|
||||||
|
|
||||||
|
if ((pos = strstr(sql, what)))
|
||||||
|
{
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
len = strlen(what);
|
||||||
|
pos[len] = '\0';
|
||||||
|
return pos + len + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* error */
|
||||||
|
return parse_error(index);
|
||||||
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
skip_ident(Oid index, char *sql)
|
skip_ident(Oid index, char *sql)
|
||||||
{
|
{
|
||||||
@ -664,7 +682,7 @@ repack_indexdef(PG_FUNCTION_ARGS)
|
|||||||
/* tablespace is to replace */
|
/* tablespace is to replace */
|
||||||
char *tmp, *limit;
|
char *tmp, *limit;
|
||||||
limit = strchr(stmt.options, '\0');
|
limit = strchr(stmt.options, '\0');
|
||||||
tmp = skip_const(index, stmt.options, " TABLESPACE", NULL);
|
tmp = skip_until_const(index, stmt.options, " TABLESPACE");
|
||||||
appendStringInfoString(&str, stmt.options);
|
appendStringInfoString(&str, stmt.options);
|
||||||
appendStringInfo(&str, " %s", NameStr(*tablespace));
|
appendStringInfo(&str, " %s", NameStr(*tablespace));
|
||||||
tmp = skip_ident(index, tmp);
|
tmp = skip_ident(index, tmp);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user