pg_get_indexdef excludes tablespace info

Started by Steven Flattover 18 years ago2 messagesbugs
Jump to latest
#1Steven Flatt
steven.flatt@gmail.com

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

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Steven Flatt (#1)
Re: pg_get_indexdef excludes tablespace info

"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