• Stephen Frost's avatar
    pg_upgrade: Fix large object COMMENTS, SECURITY LABELS · ff992c07
    Stephen Frost authored
    When performing a pg_upgrade, we copy the files behind pg_largeobject
    and pg_largeobject_metadata, allowing us to avoid having to dump out and
    reload the actual data for large objects and their ACLs.
    
    Unfortunately, that isn't all of the information which can be associated
    with large objects.  Currently, we also support COMMENTs and SECURITY
    LABELs with large objects and these were being silently dropped during a
    pg_upgrade as pg_dump would skip everything having to do with a large
    object and pg_upgrade only copied the tables mentioned to the new
    cluster.
    
    As the file copies happen after the catalog dump and reload, we can't
    simply include the COMMENTs and SECURITY LABELs in pg_dump's binary-mode
    output but we also have to include the actual large object definition as
    well.  With the definition, comments, and security labels in the pg_dump
    output and the file copies performed by pg_upgrade, all of the data and
    metadata associated with large objects is able to be successfully pulled
    forward across a pg_upgrade.
    
    In 9.6 and master, we can simply adjust the dump bitmask to indicate
    which components we don't want.  In 9.5 and earlier, we have to put
    explciit checks in in dumpBlob() and dumpBlobs() to not include the ACL
    or the data when in binary-upgrade mode.
    
    Adjustments made to the privileges regression test to allow another test
    (large_object.sql) to be added which explicitly leaves a large object
    with a comment in place to provide coverage of that case with
    pg_upgrade.
    
    Back-patch to all supported branches.
    
    Discussion: https://postgr.es/m/20170221162655.GE9812@tamriel.snowman.net
    ff992c07
pg_dump.c 520 KB