• Tom Lane's avatar
    Don't throw serialization errors for self-conflicts in INSERT ON CONFLICT. · a6c0a5b6
    Tom Lane authored
    A transaction that conflicts against itself, for example
    	INSERT INTO t(pk) VALUES (1),(1) ON CONFLICT DO NOTHING;
    should behave the same regardless of isolation level.  It certainly
    shouldn't throw a serialization error, as retrying will not help.
    We got this wrong due to the ON CONFLICT logic not considering the case,
    as reported by Jason Dusek.
    
    Core of this patch is by Peter Geoghegan (based on an earlier patch by
    Thomas Munro), though I didn't take his proposed code refactoring for fear
    that it might have unexpected side-effects.  Test cases by Thomas Munro
    and myself.
    
    Report: <CAO3NbwOycQjt2Oqy2VW-eLTq2M5uGMyHnGm=RNga4mjqcYD7gQ@mail.gmail.com>
    Related-Discussion: <57EE93C8.8080504@postgrespro.ru>
    a6c0a5b6
insert-conflict-do-nothing-2.spec 1.31 KB