Parsed test spec with 2 sessions starting permutation: merge1 c1 select2 c2 step merge1: MERGE INTO target t USING (SELECT 1 as key, 'merge1' as val) s ON s.key = t.key WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.val) WHEN MATCHED THEN UPDATE set val = t.val || ' updated by merge1'; step c1: COMMIT; step select2: SELECT * FROM target; key|val ---+------ 1|merge1 (1 row) step c2: COMMIT; starting permutation: merge1 c1 merge2 select2 c2 step merge1: MERGE INTO target t USING (SELECT 1 as key, 'merge1' as val) s ON s.key = t.key WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.val) WHEN MATCHED THEN UPDATE set val = t.val || ' updated by merge1'; step c1: COMMIT; step merge2: MERGE INTO target t USING (SELECT 1 as key, 'merge2' as val) s ON s.key = t.key WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.val) WHEN MATCHED THEN UPDATE set val = t.val || ' updated by merge2'; step select2: SELECT * FROM target; key|val ---+------------------------ 1|merge1 updated by merge2 (1 row) step c2: COMMIT; starting permutation: insert1 merge2 c1 select2 c2 step insert1: INSERT INTO target VALUES (1, 'insert1'); step merge2: MERGE INTO target t USING (SELECT 1 as key, 'merge2' as val) s ON s.key = t.key WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.val) WHEN MATCHED THEN UPDATE set val = t.val || ' updated by merge2'; step c1: COMMIT; step merge2: <... completed> ERROR: duplicate key value violates unique constraint "target_pkey" step select2: SELECT * FROM target; ERROR: current transaction is aborted, commands ignored until end of transaction block step c2: COMMIT; starting permutation: merge1 merge2 c1 select2 c2 step merge1: MERGE INTO target t USING (SELECT 1 as key, 'merge1' as val) s ON s.key = t.key WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.val) WHEN MATCHED THEN UPDATE set val = t.val || ' updated by merge1'; step merge2: MERGE INTO target t USING (SELECT 1 as key, 'merge2' as val) s ON s.key = t.key WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.val) WHEN MATCHED THEN UPDATE set val = t.val || ' updated by merge2'; step c1: COMMIT; step merge2: <... completed> ERROR: duplicate key value violates unique constraint "target_pkey" step select2: SELECT * FROM target; ERROR: current transaction is aborted, commands ignored until end of transaction block step c2: COMMIT; starting permutation: merge1 merge2 a1 select2 c2 step merge1: MERGE INTO target t USING (SELECT 1 as key, 'merge1' as val) s ON s.key = t.key WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.val) WHEN MATCHED THEN UPDATE set val = t.val || ' updated by merge1'; step merge2: MERGE INTO target t USING (SELECT 1 as key, 'merge2' as val) s ON s.key = t.key WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.val) WHEN MATCHED THEN UPDATE set val = t.val || ' updated by merge2'; step a1: ABORT; step merge2: <... completed> step select2: SELECT * FROM target; key|val ---+------ 1|merge2 (1 row) step c2: COMMIT; starting permutation: delete1 insert1 c1 merge2 select2 c2 step delete1: DELETE FROM target WHERE key = 1; step insert1: INSERT INTO target VALUES (1, 'insert1'); step c1: COMMIT; step merge2: MERGE INTO target t USING (SELECT 1 as key, 'merge2' as val) s ON s.key = t.key WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.val) WHEN MATCHED THEN UPDATE set val = t.val || ' updated by merge2'; step select2: SELECT * FROM target; key|val ---+------------------------- 1|insert1 updated by merge2 (1 row) step c2: COMMIT; starting permutation: delete1 insert1 merge2 c1 select2 c2 step delete1: DELETE FROM target WHERE key = 1; step insert1: INSERT INTO target VALUES (1, 'insert1'); step merge2: MERGE INTO target t USING (SELECT 1 as key, 'merge2' as val) s ON s.key = t.key WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.val) WHEN MATCHED THEN UPDATE set val = t.val || ' updated by merge2'; step c1: COMMIT; step merge2: <... completed> ERROR: duplicate key value violates unique constraint "target_pkey" step select2: SELECT * FROM target; ERROR: current transaction is aborted, commands ignored until end of transaction block step c2: COMMIT; starting permutation: delete1 insert1 merge2i c1 select2 c2 step delete1: DELETE FROM target WHERE key = 1; step insert1: INSERT INTO target VALUES (1, 'insert1'); step merge2i: MERGE INTO target t USING (SELECT 1 as key, 'merge2' as val) s ON s.key = t.key WHEN MATCHED THEN UPDATE set val = t.val || ' updated by merge2'; step c1: COMMIT; step select2: SELECT * FROM target; key|val ---+------- 1|insert1 (1 row) step c2: COMMIT;