diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2016-01-13 18:55:27 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2016-01-13 18:55:27 -0500 |
commit | c42df2d46c4223127116b1d7eb27719adbba39ab (patch) | |
tree | 93d51a6cc55b5c5d6f395990526541240d2857da /src/backend/access/gist/giststrat.c | |
parent | 6adba13e42a34750ef2f88ec0780db8416d8bf2e (diff) | |
download | postgresql-c42df2d46c4223127116b1d7eb27719adbba39ab.tar.gz postgresql-c42df2d46c4223127116b1d7eb27719adbba39ab.zip |
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.
Diffstat (limited to 'src/backend/access/gist/giststrat.c')
0 files changed, 0 insertions, 0 deletions