# Tests for contrib/pgrowlocks setup { CREATE TABLE multixact_conflict (a int PRIMARY KEY, b int); INSERT INTO multixact_conflict VALUES (1, 2), (3, 4); } teardown { DROP TABLE multixact_conflict; } session s1 step s1_begin { BEGIN; } step s1_tuplock1 { SELECT * FROM multixact_conflict FOR KEY SHARE; } step s1_tuplock2 { SELECT * FROM multixact_conflict FOR SHARE; } step s1_tuplock3 { SELECT * FROM multixact_conflict FOR NO KEY UPDATE; } step s1_tuplock4 { SELECT * FROM multixact_conflict FOR UPDATE; } step s1_updatea { UPDATE multixact_conflict SET a = 10 WHERE a = 1; } step s1_updateb { UPDATE multixact_conflict SET b = 11 WHERE b = 4; } step s1_lcksvpt { SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT s; } step s1_commit { COMMIT; } session s2 step s2_rowlocks { SELECT locked_row, multi, modes FROM pgrowlocks('multixact_conflict'); } permutation s1_begin s1_tuplock1 s2_rowlocks s1_commit permutation s1_begin s1_tuplock2 s2_rowlocks s1_commit permutation s1_begin s1_tuplock3 s2_rowlocks s1_commit permutation s1_begin s1_tuplock4 s2_rowlocks s1_commit permutation s1_begin s1_updatea s2_rowlocks s1_commit permutation s1_begin s1_updateb s2_rowlocks s1_commit # test multixact cases using savepoints permutation s1_begin s1_lcksvpt s1_tuplock1 s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_tuplock2 s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_tuplock3 s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_tuplock4 s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_updatea s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_updateb s2_rowlocks s1_commit