]> granicus.if.org Git - postgresql/commit
Fix tablespace inheritance for partitioned rels
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Thu, 25 Apr 2019 14:20:23 +0000 (10:20 -0400)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Thu, 25 Apr 2019 14:31:32 +0000 (10:31 -0400)
commit87259588d0ab0b8e742e30596afa7ae25caadb18
tree965b3dc1c2f09fe30a7a6968d28ee0b0bb5378fa
parent3b23552ad8bbb1384381b67f860019d14d5b680e
Fix tablespace inheritance for partitioned rels

Commit ca4103025dfe left a few loose ends.  The most important one
(broken pg_dump output) is already fixed by virtue of commit
3b23552ad8bb, but some things remained:

* When ALTER TABLE rewrites tables, the indexes must remain in the
  tablespace they were originally in.  This didn't work because
  index recreation during ALTER TABLE runs manufactured SQL (yuck),
  which runs afoul of default_tablespace in competition with the parent
  relation tablespace.  To fix, reset default_tablespace to the empty
  string temporarily, and add the TABLESPACE clause as appropriate.

* Setting a partitioned rel's tablespace to the database default is
  confusing; if it worked, it would direct the partitions to that
  tablespace regardless of default_tablespace.  But in reality it does
  not work, and making it work is a larger project.  Therefore, throw
  an error when this condition is detected, to alert the unwary.

Add some docs and tests, too.

Author: Álvaro Herrera
Discussion: https://postgr.es/m/CAKJS1f_1c260nOt_vBJ067AZ3JXptXVRohDVMLEBmudX1YEx-A@mail.gmail.com
18 files changed:
doc/src/sgml/config.sgml
doc/src/sgml/ref/create_table.sgml
src/backend/bootstrap/bootparse.y
src/backend/commands/indexcmds.c
src/backend/commands/matview.c
src/backend/commands/tablecmds.c
src/backend/commands/tablespace.c
src/backend/nodes/copyfuncs.c
src/backend/nodes/equalfuncs.c
src/backend/nodes/outfuncs.c
src/backend/parser/gram.y
src/backend/parser/parse_utilcmd.c
src/backend/utils/adt/ruleutils.c
src/include/catalog/catversion.h
src/include/commands/tablespace.h
src/include/nodes/parsenodes.h
src/test/regress/input/tablespace.source
src/test/regress/output/tablespace.source