Why postgres pages use line pointers Without line pointers, rows are packed from the start of the page and the index stores row 4 as byte 144. Deleting row 3 and closing the gap moves row 4 to byte 104, so the index must be rewritten too. With line pointers, the index stores (page 0, line pointer 4). Compacting the page only changes line pointer 4's offset and the index is untouched. index row 4 → page header ◀◀ ❚❚ ▶▶