pgsql: Handle extension members when first setting object dump flags in - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Handle extension members when first setting object dump flags in
Date
Msg-id E1aJVGb-0006G5-10@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Handle extension members when first setting object dump flags in pg_dump.

pg_dump's original approach to handling extension member objects was to
run around and clear (or set) their dump flags rather late in its data
collection process.  Unfortunately, quite a lot of code expects those flags
to be valid before that; which was an entirely reasonable expectation
before we added extensions.  In particular, this explains Karsten Hilbert's
recent report of pg_upgrade failing on a database in which an extension
has been installed into the pg_catalog schema.  Its objects are initially
marked as not-to-be-dumped on the strength of their schema, and later we
change them to must-dump because we're doing a binary upgrade of their
extension; but we've already skipped essential tasks like making associated
DO_SHELL_TYPE objects.

To fix, collect extension membership data first, and incorporate it in the
initial setting of the dump flags, so that those are once again correct
from the get-go.  This has the undesirable side effect of slightly
lengthening the time taken before pg_dump acquires table locks, but testing
suggests that the increase in that window is not very much.

Along the way, get rid of ugly special-case logic for deciding whether
to dump procedural languages, FDWs, and foreign servers; dump decisions
for those are now correct up-front, too.

In 9.3 and up, this also fixes erroneous logic about when to dump event
triggers (basically, they were *always* dumped before).  In 9.5 and up,
transform objects had that problem too.

Since this problem came in with extensions, back-patch to all supported
versions.

Branch
------
REL9_4_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/7393208b512545034061edce5d124090270f8bac

Modified Files
--------------
src/bin/pg_dump/common.c  |  158 +++++++++++++++++++-----
src/bin/pg_dump/pg_dump.c |  301 +++++++++++++++++++++++++--------------------
src/bin/pg_dump/pg_dump.h |   16 +++
3 files changed, 312 insertions(+), 163 deletions(-)


pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: pgsql: Access pg_dump's options structs through Archive struct, not dir
Next
From: Tom Lane
Date:
Subject: pgsql: Handle extension members when first setting object dump flags in