1Parsed test spec with 2 sessions 2 3starting permutation: insert1 insert2 c1 select2 c2 4step insert1: INSERT INTO upsert(key, payload) VALUES('FooFoo', 'insert1') ON CONFLICT (lower(key)) DO UPDATE set key = EXCLUDED.key, payload = upsert.payload || ' updated by insert1'; 5step insert2: INSERT INTO upsert(key, payload) VALUES('FOOFOO', 'insert2') ON CONFLICT (lower(key)) DO UPDATE set key = EXCLUDED.key, payload = upsert.payload || ' updated by insert2'; <waiting ...> 6step c1: COMMIT; 7step insert2: <... completed> 8step select2: SELECT * FROM upsert; 9key |payload 10------+-------------------------- 11FOOFOO|insert1 updated by insert2 12(1 row) 13 14step c2: COMMIT; 15 16starting permutation: insert1 insert2 a1 select2 c2 17step insert1: INSERT INTO upsert(key, payload) VALUES('FooFoo', 'insert1') ON CONFLICT (lower(key)) DO UPDATE set key = EXCLUDED.key, payload = upsert.payload || ' updated by insert1'; 18step insert2: INSERT INTO upsert(key, payload) VALUES('FOOFOO', 'insert2') ON CONFLICT (lower(key)) DO UPDATE set key = EXCLUDED.key, payload = upsert.payload || ' updated by insert2'; <waiting ...> 19step a1: ABORT; 20step insert2: <... completed> 21step select2: SELECT * FROM upsert; 22key |payload 23------+------- 24FOOFOO|insert2 25(1 row) 26 27step c2: COMMIT; 28