• Kevin Grittner's avatar
    Detect SSI conflicts before reporting constraint violations · fcff8a57
    Kevin Grittner authored
    While prior to this patch the user-visible effect on the database
    of any set of successfully committed serializable transactions was
    always consistent with some one-at-a-time order of execution of
    those transactions, the presence of declarative constraints could
    allow errors to occur which were not possible in any such ordering,
    and developers had no good workarounds to prevent user-facing
    errors where they were not necessary or desired.  This patch adds
    a check for serialization failure ahead of duplicate key checking
    so that if a developer explicitly (redundantly) checks for the
    pre-existing value they will get the desired serialization failure
    where the problem is caused by a concurrent serializable
    transaction; otherwise they will get a duplicate key error.
    
    While it would be better if the reads performed by the constraints
    could count as part of the work of the transaction for
    serialization failure checking, and we will hopefully get there
    some day, this patch allows a clean and reliable way for developers
    to work around the issue.  In many cases existing code will already
    be doing the right thing for this to "just work".
    
    Author: Thomas Munro, with minor editing of docs by me
    Reviewed-by: Marko Tiikkaja, Kevin Grittner
    fcff8a57
read-write-unique-3.spec 699 Bytes