Re: pg_dump is broken for partition tablespaces - Mailing list pgsql-hackers

From Tom Lane
Subject Re: pg_dump is broken for partition tablespaces
Date
Msg-id 30049.1555537881@sss.pgh.pa.us
Whole thread Raw
In response to Re: pg_dump is broken for partition tablespaces  (Alvaro Herrera <alvherre@2ndquadrant.com>)
Responses Re: pg_dump is broken for partition tablespaces
List pgsql-hackers
Alvaro Herrera <alvherre@2ndquadrant.com> writes:
> 1. pg_dump now uses regular CREATE TABLE followed by ALTER TABLE / ATTACH
>    PARTITION when creating partitions, rather than CREATE TABLE
>    PARTITION OF.  pg_dump --binary-upgrade was already doing that, so
>    this part mostly removes some code.  In order to make the partitions
>    reach the correct tablespace, the "default_tablespace" GUC is used.
>    No TABLESPACE clause is added to the dump.  This is David's patch
>    near the start of the thread.

This idea seems reasonable independently of all else, simply on the grounds
of reducing code duplication.  It also has the advantage that if you try
to do a selective restore of just a partition, and the parent partitioned
table isn't around, you can still do it (with an ignorable error).

> 2. When creating a partition using the CREATE TABLE PARTITION OF syntax,
>    the TABLESPACE clause has highest precedence; if that is not given,
>    the partitioned table's tablespace is used; if that is set to 0 (the
>    default), default_tablespace is used; if that's set to empty or a
>    nonexistant tablespace, the database's default tablespace is used.
>    This is (I think) what Andres proposed in
>    https://postgr.es/m/20190306223741.lolaaimhkkp4kict@alap3.anarazel.de

Hmm.  The precedence order between the second and third options seems
pretty arbitrary and hence unrememberable.  I don't say this choice is
wrong, but it's not clear that it's right, either.

> 3. Partitioned relations can have the database tablespace in
>    pg_class.reltablespace, as opposed to storage-bearing relations which
>    cannot.  This is useful to be able to put partitions in the database
>    tablespace even if the default_tablespace is set to something else.

I still feel that this is a darn bad idea.  It goes against the rule
that's existed for pg_class.reltablespace since its beginning, and
I think it's inevitable that that's going to break something.

            regards, tom lane



pgsql-hackers by date:

Previous
From: Fabien COELHO
Date:
Subject: Re: pgsql: Fix unportable code in pgbench.
Next
From: Tom Lane
Date:
Subject: Re: pgsql: Fix unportable code in pgbench.