• Tom Lane's avatar
    Add missing buffer lock acquisition in GetTupleForTrigger(). · da63fec7
    Tom Lane authored
    If we had not been holding buffer pin continuously since the tuple was
    initially fetched by the UPDATE or DELETE query, it would be possible for
    VACUUM or a page-prune operation to move the tuple while we're trying to
    copy it.  This would result in a garbage "old" tuple value being passed to
    an AFTER ROW UPDATE or AFTER ROW DELETE trigger.  The preconditions for
    this are somewhat improbable, and the timing constraints are very tight;
    so it's not so surprising that this hasn't been reported from the field,
    even though the bug has been there a long time.
    
    Problem found by Andres Freund.  Back-patch to all active branches.
    da63fec7
trigger.c 135 KB