• Tom Lane's avatar
    Handle extension members when first setting object dump flags in pg_dump. · e72d7d85
    Tom Lane authored
    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.
    e72d7d85
pg_dump.h 17.5 KB