Parsed test spec with 3 sessions starting permutation: s1_tids s1_plan s1_begin s1_declare s1_f1 s2_vac s3_ins s1_rest s1_commit s1_after step s1_tids: SELECT ctid, id, k, c FROM r WHERE id < 100 ORDER BY id; ctid |id| k|c -------+--+----+- (16,41)| 1| 2|1 (16,42)| 2|1000|0 (17,2) | 4|1001|0 (18,1) | 5| 100|1 (18,2) | 6|1002|0 (5 rows) step s1_plan: EXPLAIN (COSTS OFF) SELECT id, k FROM r WHERE c = 1 ORDER BY k; QUERY PLAN ------------------------------ Custom Scan (LionOrdered) on r Ordered By: r_k Lion Cond: (c = 1) Lion Indexes: r_c (4 rows) step s1_begin: BEGIN; step s1_declare: DECLARE cur NO SCROLL CURSOR FOR SELECT id, k, ctid FROM r WHERE c = 1 ORDER BY k; step s1_f1: FETCH 1 FROM cur; id|k|ctid --+-+------- 1|2|(16,41) (1 row) step s2_vac: VACUUM r; step s3_ins: INSERT INTO r VALUES (7, 50, 0, repeat('b',3000)) RETURNING ctid; ctid ------ (17,1) (1 row) step s1_rest: FETCH ALL FROM cur; id| k|ctid --+---+------ 5|100|(18,1) (1 row) step s1_commit: COMMIT; step s1_after: SELECT ctid, id, k, c FROM r WHERE id < 100 ORDER BY id; ctid |id| k|c -------+--+----+- (16,41)| 1| 2|1 (16,42)| 2|1000|0 (17,2) | 4|1001|0 (18,1) | 5| 100|1 (18,2) | 6|1002|0 (17,1) | 7| 50|0 (6 rows)