Обсуждение: pg_get_indexdef excludes tablespace info
Postgres 8.2.4.
Would this be considered a bug or is the tablespace info excluded for
a particular reason?
# CREATE TABLESPACE foo_space LOCATION '/some/dir';
# CREATE TABLE foo (a int);
# CREATE INDEX foo_idx ON foo(a) TABLESPACE foo_space;
# SELECT pg_get_indexdef(oid) FROM pg_class WHERE relname = 'foo_idx';
pg_get_indexdef
---------------------------------------------
CREATE INDEX foo_idx ON foo USING btree (a)
(1 row)
I would expect a "TABLESPACE foo_space" to be added on to the end of
that. Haven't checked if other pg_get_* functions are affected, or if
it even applies to them.
Steve
"Steven Flatt" <steven.flatt@gmail.com> writes:
> Would this be considered a bug or is the tablespace info excluded for
> a particular reason?
It's intentional: pg_dump doesn't want it there. In a pg_dump script
we want to do
set default_tablespace = foo_space;
create index foo_idx on foo using btree (a);
because that way the creation command doesn't fail completely if there's
no such tablespace in the target installation.
We could maybe teach pg_dump to strip the clause out of
pg_get_indexdef's output, but that seemed complicated and fragile.
regards, tom lane