Parsed test spec with 2 sessions starting permutation: s1b s2b s1u s2qual s1c s2c step s1b: BEGIN; step s2b: BEGIN; step s1u: UPDATE iso_tbl SET v = v + 1 WHERE id = 1; step s2qual: SELECT id FROM iso_tbl WHERE v = 10 FOR UPDATE; step s1c: COMMIT; step s2qual: <... completed> id -- (0 rows) step s2c: COMMIT; starting permutation: s1b s2b s1u s2qual s1u s1c s2c step s1b: BEGIN; step s2b: BEGIN; step s1u: UPDATE iso_tbl SET v = v + 1 WHERE id = 1; step s2qual: SELECT id FROM iso_tbl WHERE v = 10 FOR UPDATE; step s1u: UPDATE iso_tbl SET v = v + 1 WHERE id = 1; step s1c: COMMIT; step s2qual: <... completed> id -- (0 rows) step s2c: COMMIT; starting permutation: s1b s2b s1u s2u s1c s2c s2sel step s1b: BEGIN; step s2b: BEGIN; step s1u: UPDATE iso_tbl SET v = v + 1 WHERE id = 1; step s2u: UPDATE iso_tbl SET v = v * 2 WHERE id = 1; step s1c: COMMIT; step s2u: <... completed> step s2c: COMMIT; step s2sel: SELECT id, v, note FROM iso_tbl ORDER BY id; id| v|note --+--+---- 1|22|a 2|20|b 3|30|c (3 rows) starting permutation: s1b s2b s1d s2u s1c s2c s2sel step s1b: BEGIN; step s2b: BEGIN; step s1d: DELETE FROM iso_tbl WHERE id = 1; step s2u: UPDATE iso_tbl SET v = v * 2 WHERE id = 1; step s1c: COMMIT; step s2u: <... completed> step s2c: COMMIT; step s2sel: SELECT id, v, note FROM iso_tbl ORDER BY id; id| v|note --+--+---- 2|20|b 3|30|c (2 rows) starting permutation: s1b s2b s1u s2d s1c s2c s2sel step s1b: BEGIN; step s2b: BEGIN; step s1u: UPDATE iso_tbl SET v = v + 1 WHERE id = 1; step s2d: DELETE FROM iso_tbl WHERE id = 1; step s1c: COMMIT; step s2d: <... completed> step s2c: COMMIT; step s2sel: SELECT id, v, note FROM iso_tbl ORDER BY id; id| v|note --+--+---- 2|20|b 3|30|c (2 rows) starting permutation: s1b s2b s1u s2u s1a s2c s2sel step s1b: BEGIN; step s2b: BEGIN; step s1u: UPDATE iso_tbl SET v = v + 1 WHERE id = 1; step s2u: UPDATE iso_tbl SET v = v * 2 WHERE id = 1; step s1a: ROLLBACK; step s2u: <... completed> step s2c: COMMIT; step s2sel: SELECT id, v, note FROM iso_tbl ORDER BY id; id| v|note --+--+---- 1|20|a 2|20|b 3|30|c (3 rows) starting permutation: s1b s2b s2ukey s1u s2c s1c s2sel step s1b: BEGIN; step s2b: BEGIN; step s2ukey: UPDATE iso_tbl SET id = 5 WHERE id = 1; step s1u: UPDATE iso_tbl SET v = v + 1 WHERE id = 1; step s2c: COMMIT; step s1u: <... completed> step s1c: COMMIT; step s2sel: SELECT id, v, note FROM iso_tbl ORDER BY id; id| v|note --+--+---- 2|20|b 3|30|c 5|10|a (3 rows) starting permutation: s1rr s2b s2u s2c s1u s1a s2sel step s1rr: BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT count(*) FROM iso_tbl; count ----- 3 (1 row) step s2b: BEGIN; step s2u: UPDATE iso_tbl SET v = v * 2 WHERE id = 1; step s2c: COMMIT; step s1u: UPDATE iso_tbl SET v = v + 1 WHERE id = 1; ERROR: could not serialize access due to concurrent update step s1a: ROLLBACK; step s2sel: SELECT id, v, note FROM iso_tbl ORDER BY id; id| v|note --+--+---- 1|20|a 2|20|b 3|30|c (3 rows) starting permutation: s1rr s2b s2d s2c s1u s1a s2sel step s1rr: BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT count(*) FROM iso_tbl; count ----- 3 (1 row) step s2b: BEGIN; step s2d: DELETE FROM iso_tbl WHERE id = 1; step s2c: COMMIT; step s1u: UPDATE iso_tbl SET v = v + 1 WHERE id = 1; ERROR: could not serialize access due to concurrent delete step s1a: ROLLBACK; step s2sel: SELECT id, v, note FROM iso_tbl ORDER BY id; id| v|note --+--+---- 2|20|b 3|30|c (2 rows) starting permutation: s1ser s2ser s1w s2w s1c s2c s2sel step s1ser: BEGIN ISOLATION LEVEL SERIALIZABLE; SELECT sum(v) FROM iso_tbl WHERE id IN (1, 2); sum --- 30 (1 row) step s2ser: BEGIN ISOLATION LEVEL SERIALIZABLE; SELECT sum(v) FROM iso_tbl WHERE id IN (1, 2); sum --- 30 (1 row) step s1w: UPDATE iso_tbl SET v = 0 WHERE id = 2; step s2w: UPDATE iso_tbl SET v = 0 WHERE id = 1; step s1c: COMMIT; step s2c: COMMIT; ERROR: could not serialize access due to read/write dependencies among transactions step s2sel: SELECT id, v, note FROM iso_tbl ORDER BY id; id| v|note --+--+---- 1|10|a 2| 0|b 3|30|c (3 rows) starting permutation: s1b s2b s1lock s2lock s1c s2c step s1b: BEGIN; step s2b: BEGIN; step s1lock: SELECT id FROM iso_tbl WHERE id = 1 FOR UPDATE; id -- 1 (1 row) step s2lock: SELECT id FROM iso_tbl WHERE id = 1 FOR UPDATE; step s1c: COMMIT; step s2lock: <... completed> id -- 1 (1 row) step s2c: COMMIT; starting permutation: s1b s2b s1lock s2nowait s1c s2c step s1b: BEGIN; step s2b: BEGIN; step s1lock: SELECT id FROM iso_tbl WHERE id = 1 FOR UPDATE; id -- 1 (1 row) step s2nowait: SELECT id FROM iso_tbl WHERE id = 1 FOR UPDATE NOWAIT; ERROR: could not obtain lock on row in relation "iso_tbl" step s1c: COMMIT; step s2c: COMMIT; starting permutation: s1b s2b s1lock s2skip s1c s2c step s1b: BEGIN; step s2b: BEGIN; step s1lock: SELECT id FROM iso_tbl WHERE id = 1 FOR UPDATE; id -- 1 (1 row) step s2skip: SELECT id FROM iso_tbl ORDER BY id FOR UPDATE SKIP LOCKED; id -- 2 3 (2 rows) step s1c: COMMIT; step s2c: COMMIT; starting permutation: s1b s2b s1lock s2share s1c s2c step s1b: BEGIN; step s2b: BEGIN; step s1lock: SELECT id FROM iso_tbl WHERE id = 1 FOR UPDATE; id -- 1 (1 row) step s2share: SELECT id FROM iso_tbl WHERE id = 1 FOR SHARE; step s1c: COMMIT; step s2share: <... completed> id -- 1 (1 row) step s2c: COMMIT; starting permutation: s1b s2b s1lock s2u s1c s2c s2sel step s1b: BEGIN; step s2b: BEGIN; step s1lock: SELECT id FROM iso_tbl WHERE id = 1 FOR UPDATE; id -- 1 (1 row) step s2u: UPDATE iso_tbl SET v = v * 2 WHERE id = 1; step s1c: COMMIT; step s2u: <... completed> step s2c: COMMIT; step s2sel: SELECT id, v, note FROM iso_tbl ORDER BY id; id| v|note --+--+---- 1|20|a 2|20|b 3|30|c (3 rows) starting permutation: s1b s1i s2sel s1c s2sel step s1b: BEGIN; step s1i: INSERT INTO iso_tbl VALUES (4, 40, 'd'); step s2sel: SELECT id, v, note FROM iso_tbl ORDER BY id; id| v|note --+--+---- 1|10|a 2|20|b 3|30|c (3 rows) step s1c: COMMIT; step s2sel: SELECT id, v, note FROM iso_tbl ORDER BY id; id| v|note --+--+---- 1|10|a 2|20|b 3|30|c 4|40|d (4 rows) starting permutation: s1b s1i1 s2i1 s1a s2sel step s1b: BEGIN; step s1i1: INSERT INTO iso_tbl VALUES (10, 11, 'dup'); step s2i1: INSERT INTO iso_tbl VALUES (10, 12, 'dup2'); step s1a: ROLLBACK; step s2i1: <... completed> step s2sel: SELECT id, v, note FROM iso_tbl ORDER BY id; id| v|note --+--+---- 1|10|a 2|20|b 3|30|c 10|12|dup2 (4 rows) starting permutation: s1b s1i1 s2i1 s1c s2sel step s1b: BEGIN; step s1i1: INSERT INTO iso_tbl VALUES (10, 11, 'dup'); step s2i1: INSERT INTO iso_tbl VALUES (10, 12, 'dup2'); step s1c: COMMIT; step s2i1: <... completed> ERROR: duplicate key value violates unique constraint "iso_tbl_pkey" step s2sel: SELECT id, v, note FROM iso_tbl ORDER BY id; id| v|note --+--+---- 1|10|a 2|20|b 3|30|c 10|11|dup (4 rows) starting permutation: s1b s1i1 s2ins s1c s2sel step s1b: BEGIN; step s1i1: INSERT INTO iso_tbl VALUES (10, 11, 'dup'); step s2ins: INSERT INTO iso_tbl VALUES (10, 99, 'again') ON CONFLICT (id) DO UPDATE SET v = excluded.v; step s1c: COMMIT; step s2ins: <... completed> step s2sel: SELECT id, v, note FROM iso_tbl ORDER BY id; id| v|note --+--+---- 1|10|a 2|20|b 3|30|c 10|99|dup (4 rows)