• Tom Lane's avatar
    Avoid testing tuple visibility without buffer lock in RI_FKey_check(). · 6292c233
    Tom Lane authored
    Despite the argumentation I wrote in commit 7a2fe85b, it's unsafe to do
    this, because in corner cases it's possible for HeapTupleSatisfiesSelf
    to try to set hint bits on the target tuple; and at least since 8.2 we
    have required the buffer content lock to be held while setting hint bits.
    
    The added regression test exercises one such corner case.  Unpatched, it
    causes an assertion failure in assert-enabled builds, or otherwise would
    cause a hint bit change in a buffer we don't hold lock on, which given
    the right race condition could result in checksum failures or other data
    consistency problems.  The odds of a problem in the field are probably
    pretty small, but nonetheless back-patch to all supported branches.
    
    Report: <19391.1477244876@sss.pgh.pa.us>
    6292c233
foreign_key.sql 31.4 KB