• Andres Freund's avatar
    Test additional speculative conflict scenarios. · 43e08419
    Andres Freund authored
    Previously, the speculative insert tests did not cover the case when a
    tuple t is inserted into a table with a unique index on a column but
    before it can insert into the index, a concurrent transaction has
    inserted a conflicting value into the index and the insertion of tuple t
    must be aborted.
    
    The basic permutation is one session successfully inserts into the table
    and an associated unique index while a concurrent session successfully
    inserts into the table but discovers a conflict before inserting into
    the index and must abort the insertion.
    
    Several variants on this include:
    - swap which session is successful
    - first session insert transaction does not commit, so second session
    must wait on a transaction lock
    - first session insert does not "complete", so second session must wait
    on a speculative insertion lock
    
    Also, refactor the existing TOAST table upsert test to be in the same
    spec and reuse the steps.
    
    Author: Melanie Plageman, Ashwin Agrawal, Andres Freund
    Reviewed-by: Andres Freund, Taylor Vesely
    Discussion: https://postgr.es/m/CAAKRu_ZRmxy_OEryfY3G8Zp01ouhgw59_-_Cm8n7LzRH5BAvng@mail.gmail.com
    43e08419
insert-conflict-specconflict.spec 10.7 KB