Skip to content
Snippets Groups Projects
Select Git revision
  • benchmark-tools
  • postgres-lambda
  • master default
  • REL9_4_25
  • REL9_5_20
  • REL9_6_16
  • REL_10_11
  • REL_11_6
  • REL_12_1
  • REL_12_0
  • REL_12_RC1
  • REL_12_BETA4
  • REL9_4_24
  • REL9_5_19
  • REL9_6_15
  • REL_10_10
  • REL_11_5
  • REL_12_BETA3
  • REL9_4_23
  • REL9_5_18
  • REL9_6_14
  • REL_10_9
  • REL_11_4
23 results

foreigncmds.c

Blame
    • Tom Lane's avatar
      52994e9e
      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
      History
      Fix unsafe order of operations in foreign-table DDL commands.
      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.