pgsql: Handle extension members when first setting object dump flags in
От | Tom Lane |
---|---|
Тема | pgsql: Handle extension members when first setting object dump flags in |
Дата | |
Msg-id | E1aJVGb-0006G8-1C@gemulon.postgresql.org обсуждение исходный текст |
Список | 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_3_STABLE Details ------- http://git.postgresql.org/pg/commitdiff/b87403f7037c001f750d486cf00c4325ce2eb014 Modified Files -------------- src/bin/pg_dump/common.c | 158 ++++++++++++++++++----- src/bin/pg_dump/pg_dump.c | 309 +++++++++++++++++++++++++-------------------- src/bin/pg_dump/pg_dump.h | 16 +++ 3 files changed, 316 insertions(+), 167 deletions(-)
В списке pgsql-committers по дате отправления: