Parsed test spec with 3 sessions starting permutation: mlock rseq vac munlock mcount busy ---- f (1 row) step mlock: SELECT pg_advisory_lock(1); pg_advisory_lock ---------------- (1 row) step rseq: SET LOCAL enable_seqscan = on; SET LOCAL enable_bitmapscan = off; SET LOCAL enable_indexscan = off; UPDATE iso_w SET v = CASE WHEN id <> 1500 THEN 'u' WHEN pg_advisory_lock(1)::text <> '' OR NOT pg_advisory_unlock(1) THEN 'x' ELSE 'u' END WHERE id BETWEEN 1 AND 3000; step vac: VACUUM iso_w; step munlock: SELECT pg_advisory_unlock(1); pg_advisory_unlock ------------------ t (1 row) step rseq: <... completed> step mcount: SELECT count(*) AS live, count(*) FILTER (WHERE v = 'u') AS updated FROM iso_w; live|updated ----+------- 3000| 3000 (1 row) starting permutation: mlock rbmp vac munlock mcount busy ---- f (1 row) step mlock: SELECT pg_advisory_lock(1); pg_advisory_lock ---------------- (1 row) step rbmp: SET LOCAL enable_seqscan = off; SET LOCAL enable_bitmapscan = on; SET LOCAL enable_indexscan = off; UPDATE iso_w SET v = CASE WHEN id <> 1500 THEN 'u' WHEN pg_advisory_lock(1)::text <> '' OR NOT pg_advisory_unlock(1) THEN 'x' ELSE 'u' END WHERE id BETWEEN 1 AND 3000; step vac: VACUUM iso_w; step munlock: SELECT pg_advisory_unlock(1); pg_advisory_unlock ------------------ t (1 row) step rbmp: <... completed> step mcount: SELECT count(*) AS live, count(*) FILTER (WHERE v = 'u') AS updated FROM iso_w; live|updated ----+------- 3000| 3000 (1 row) starting permutation: mlock ridx vac munlock mcount busy ---- f (1 row) step mlock: SELECT pg_advisory_lock(1); pg_advisory_lock ---------------- (1 row) step ridx: SET LOCAL enable_seqscan = off; SET LOCAL enable_bitmapscan = off; SET LOCAL enable_indexscan = on; UPDATE iso_w SET v = CASE WHEN id <> 1500 THEN 'u' WHEN pg_advisory_lock(1)::text <> '' OR NOT pg_advisory_unlock(1) THEN 'x' ELSE 'u' END WHERE id BETWEEN 1 AND 3000; step vac: VACUUM iso_w; step munlock: SELECT pg_advisory_unlock(1); pg_advisory_unlock ------------------ t (1 row) step ridx: <... completed> step mcount: SELECT count(*) AS live, count(*) FILTER (WHERE v = 'u') AS updated FROM iso_w; live|updated ----+------- 3000| 3000 (1 row) starting permutation: mlock sbmp vac munlock busy ---- f (1 row) step mlock: SELECT pg_advisory_lock(1); pg_advisory_lock ---------------- (1 row) step sbmp: SET LOCAL enable_seqscan = off; SET LOCAL enable_bitmapscan = on; SET LOCAL enable_indexscan = off; SELECT count(*) AS seen FROM iso_w WHERE id BETWEEN 1 AND 3000 AND (id <> 1500 OR (pg_advisory_lock(1)::text = '' AND pg_advisory_unlock(1))); step vac: VACUUM iso_w; step munlock: SELECT pg_advisory_unlock(1); pg_advisory_unlock ------------------ t (1 row) step sbmp: <... completed> seen ---- 3000 (1 row)