-- VACUUM of a sift_table with deleted rows in units of the most rows, 74,496 (14 of them in 1,042,944 rows): the liveness bits of such a unit (9,312 bytes) lie on -- three pages of the segment, which with the header page are four; clearing them took the header page and two more, and read a page past the end of the table. CREATE EXTENSION pg_sift; SET client_min_messages = warning; CREATE TABLE lv (id int) USING sift_table; INSERT INTO lv SELECT generate_series(1, 1042944); VACUUM (FULL) lv; SELECT count(*) AS column_segments, sum(units) AS units FROM sift.table_segments('lv') WHERE kind = 'columns'; column_segments | units -----------------+------- 1 | 14 (1 row) -- every unit has dead rows over its whole length DELETE FROM lv WHERE id % 20 = 5; VACUUM lv; SELECT count(*) AS live, sum(id) AS sum_id FROM lv; live | sum_id --------+-------------- 990797 | 516673779685 (1 row) -- and again, in units whose liveness was cleared once DELETE FROM lv WHERE id % 20 = 6; VACUUM (FREEZE) lv; SELECT count(*) AS live, sum(id) AS sum_id FROM lv; live | sum_id --------+-------------- 938650 | 489480892183 (1 row) SELECT count(*) AS live_by_a_scan_of_the_ids FROM lv WHERE id % 20 NOT IN (5, 6); live_by_a_scan_of_the_ids --------------------------- 938650 (1 row) DROP TABLE lv; DROP EXTENSION pg_sift;