setup { DROP TABLE IF EXISTS epq_lock_t; CREATE TABLE epq_lock_t (a int PRIMARY KEY, b text) WITH (autovacuum_enabled = false); ALTER TABLE epq_lock_t ALTER COLUMN b SET STORAGE PLAIN; INSERT INTO epq_lock_t SELECT a, md5(a::text) FROM generate_series(1, 260) AS s(a); DELETE FROM epq_lock_t WHERE a = 131; } teardown { DROP TABLE epq_lock_t; } session "z" step "z0" { BEGIN } step "z_report" { SELECT txid_current(), pg_create_restore_point('z') } step "z1" { SELECT a FROM epq_lock_t WHERE a = 2 FOR NO KEY UPDATE } step "z2" { UPDATE epq_lock_t SET b = 'updated by z' WHERE a = 2 } step "z3" { COMMIT } session "a" step "a1" { BEGIN } step "a2" { SELECT a FROM epq_lock_t WHERE a = 2 FOR UPDATE } step "a_report" { SELECT pg_create_restore_point('a') } step "a5_1" { SAVEPOINT foo; } step "a5" { UPDATE epq_lock_t SET b = 'updated by a' WHERE a = 2 RETURNING ctid } step "a6" { COMMIT } session "b" step "b3" { BEGIN } step "b_report" { SELECT txid_current(), pg_create_restore_point('b') } step "b4" { SELECT * FROM epq_lock_t WHERE pg_advisory_xact_lock(123132) IS NOT NULL AND a = 2 FOR KEY SHARE } step "bN" { COMMIT } session "c" step "c7" { BEGIN } step "c_report" { SELECT txid_current(), pg_create_restore_point('c') } step "cN" { SELECT * FROM epq_lock_t WHERE a = 2 FOR UPDATE; } step "cU" { SAVEPOINT foo; } step "c8" { UPDATE epq_lock_t SET b = 'updated by c' WHERE a = 2 } step "c18" { COMMIT } session "d" step "d9" { BEGIN; SELECT txid_current(), pg_create_restore_point('d'); } step "d9_2" { SELECT * FROM epq_lock_t WHERE pg_advisory_xact_lock(123133) IS NOT NULL AND a = 2 FOR KEY SHARE } step "d15" { aborts trying to lock some other tuple } session "e" step "e12" { BEGIN } step "e_report" { SELECT txid_current(), pg_create_restore_point('e') } step "e13" { SELECT * FROM epq_lock_t WHERE a = 2 FOR KEY SHARE } step "e19" { commit} session "f" step "f14" { BEGIN } step "f_report" { SELECT txid_current(), pg_create_restore_point('f') } step "f15" { UPDATE epq_lock_t SET b = 'updated by f' WHERE a = 2 } step "f19" { commit } session "g" step "g16" { BEGIN } step "g_report" { SELECT txid_current(), pg_create_restore_point('g') } step "g17" { UPDATE epq_lock_t SET b = 'updated by g' WHERE a = 2 } step "g19" { commit } session "control" step "vacuum" { VACUUM epq_lock_t; } step "curr_lsn" { SELECT pg_current_xlog_insert_location(); } step "lock_b" { SELECT pg_advisory_lock(123132) } step "unlock_b" { SELECT pg_advisory_unlock(123132) } step "lock_d" { SELECT pg_advisory_lock(123133) } step "unlock_d" { SELECT pg_advisory_unlock(123133) } permutation "vacuum" "curr_lsn" "b3" "b_report" "lock_b" "b4" "z0" "z_report" "z1" "z2" "z3" "a1" "a2" "a_report" "a5_1" "a5" "c7" "c_report" "cN" "a6" "cU" "c8" "unlock_b" "d9" "d9_2" "c18" "bN" "e12" "e_report" "e13" "f14" "f_report" "f15" "g16" "g_report" "g17" "c18" "e19" "f19" "g19" "d15" "curr_lsn"