Обсуждение: pg_get_indexdef excludes tablespace info

Поиск
Список
Период
Сортировка

pg_get_indexdef excludes tablespace info

От
"Steven Flatt"
Дата:
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

Re: pg_get_indexdef excludes tablespace info

От
Tom Lane
Дата:
"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