Parsed test spec with 2 sessions starting permutation: s1b s1update_nokey s2locktuple s1c step s1b: BEGIN; step s1update_nokey: INSERT INTO parttab (key, col1, col2) VALUES (1, 'a', 'b') ON CONFLICT (key) DO UPDATE SET col1 = 'x', col2 = 'y'; step s2locktuple: SELECT * FROM parttab FOR KEY SHARE; col1|key|col2 ----+---+---- a | 1|b (1 row) step s1c: COMMIT; starting permutation: s1b s1update_key s2locktuple s1c step s1b: BEGIN; step s1update_key: INSERT INTO parttab (key, col1, col2) VALUES (1, 'a', 'b') ON CONFLICT (key) DO UPDATE SET key=1; step s2locktuple: SELECT * FROM parttab FOR KEY SHARE; step s1c: COMMIT; step s2locktuple: <... completed> col1|key|col2 ----+---+---- a | 1|b (1 row)