• Tom Lane's avatar
    Fix unsafe order of operations in foreign-table DDL commands. · 52994e9e
    Tom Lane authored
    When updating or deleting a system catalog tuple, it's necessary to acquire
    RowExclusiveLock on the catalog before looking up the tuple; otherwise a
    concurrent VACUUM FULL on the catalog might move the tuple to a different
    TID before we can apply the update.  Coding patterns that find the tuple
    via a table scan aren't at risk here, but when obtaining the tuple from a
    catalog cache, correct ordering is important; and several routines in
    foreigncmds.c got it wrong.  Noted while running the regression tests in
    parallel with VACUUM FULL of assorted system catalogs.
    
    For consistency I moved all the heap_open calls to the starts of their
    functions, including a couple for which there was no actual bug.
    
    Back-patch to 8.4 where foreigncmds.c was added.
    52994e9e
foreigncmds.c 35.3 KB