Re: Bug in pg_dump - Mailing list pgsql-hackers

From Gilles Darold
Subject Re: Bug in pg_dump
Date
Msg-id 54ECFF3F.2000905@dalibo.com
Whole thread Raw
In response to Re: Bug in pg_dump  (Michael Paquier <michael.paquier@gmail.com>)
Responses Re: Bug in pg_dump  (Michael Paquier <michael.paquier@gmail.com>)
List pgsql-hackers
Le 24/02/2015 05:40, Michael Paquier a écrit :


On Tue, Feb 24, 2015 at 2:17 AM, Gilles Darold <gilles.darold@dalibo.com> wrote:
Looks great to me, I have tested with the postgis_topology extension
everything works fine.

Actually, after looking more in depth at the internals of pg_dump I think that both patches are wrong (did that yesterday night for another patch). First this patch marks a table in an extension as always dumpable:
+      /* Mark member table as dumpable */
+      configtbl->dobj.dump = true;
And then many checks on ext_member are added in many code paths to ensure that objects in extensions have their definition never dumped.
But actually this assumption is not true all the time per this code in getExtensionMemberShip:
        if (!dopt->binary_upgrade)
            dobj->dump = false;
        else
            dobj->dump = refdobj->dump;
So this patch would break binary upgrade where some extension objects should be dumped (one reason why I haven't noticed that before is that pg_upgrade tests do not include extensions).

Hence, one idea coming to my mind to fix the problem would be to add some extra processing directly in getExtensionMembership() after building the objects DO_TABLE_DATA with makeTableDataInfo() by checking the FK dependencies and add a dependency link with addObjectDependency. The good part with that is that even user tables that reference extension tables with a FK can be restored correctly because their constraint is added *after* loading the data. I noticed as well that with this patch the --data-only mode was dumping tables in the correct order.

Speaking of which, patches implementing this idea are attached. The module test case has been improved as well with a check using a table not in an extension linked with a FK to a table in an extension.
--
Michael

This is a far better patch and the test to export/import of the postgis_topology extension works great for me.

Thanks for the work.

-- 
Gilles Darold
Consultant PostgreSQL
http://dalibo.com - http://dalibo.org

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: PostgreSQL on z/OS UNIX?
Next
From: Mark Kirkwood
Date:
Subject: Re: Unable to build pg_rewind