• Alvaro Herrera's avatar
    Fix FOR UPDATE NOWAIT on updated tuple chains · 1c9701cf
    Alvaro Herrera authored
    If SELECT FOR UPDATE NOWAIT tries to lock a tuple that is concurrently
    being updated, it might fail to honor its NOWAIT specification and block
    instead of raising an error.
    
    Fix by adding a no-wait flag to EvalPlanQualFetch which it can pass down
    to heap_lock_tuple; also use it in EvalPlanQualFetch itself to avoid
    blocking while waiting for a concurrent transaction.
    
    Authors: Craig Ringer and Thomas Munro, tweaked by Álvaro
    http://www.postgresql.org/message-id/51FB6703.9090801@2ndquadrant.com
    
    Per Thomas Munro in the course of his SKIP LOCKED feature submission,
    who also provided one of the isolation test specs.
    
    Backpatch to 9.4, because that's as far back as it applies without
    conflicts (although the bug goes all the way back).  To that branch also
    backpatch Thomas Munro's new NOWAIT test cases, committed in master by
    Heikki as commit 9ee16b49 .
    1c9701cf
nowait-4.spec 627 Bytes