Remove overzealous index deletion assertion.
authorPeter Geoghegan
Mon, 20 Sep 2021 21:26:22 +0000 (14:26 -0700)
committerPeter Geoghegan
Mon, 20 Sep 2021 21:26:22 +0000 (14:26 -0700)
A broken HOT chain is not an unexpected condition, even when the offset
number points past the end of the page's line pointer array.
heap_prune_chain() does not (and never has) treated this condition as
unexpected, so derivative code in heap_index_delete_tuples() shouldn't
do so either.

Oversight in commit 4228817449.

The assertion can probably only fail on Postgres 14 and master.  Earlier
releases don't have commit 3c3b8a4b, which taught VACUUM to truncate the
line pointer array of heap pages.  Backpatch all the same, just to be
consistent.

Author: Peter Geoghegan 
Reported-By: Alexander Lakhin
Discussion: https://postgr.es/m/17197-9438f31f46705182@postgresql.org
Backpatch: 12-, just like commit 4228817449.

src/backend/access/heap/heapam.c

index b4bc0ce0c505a654e0ebf583e13dddae9a78ca08..94edb1decaee69d360c611b5d537b58b0bb4d820 100644 (file)
@@ -7093,10 +7093,7 @@ heap_compute_xid_horizon_for_tuples(Relation rel,
 
            /* Some sanity checks */
            if (offnum < FirstOffsetNumber || offnum > maxoff)
-           {
-               Assert(false);
                break;
-           }
 
            lp = PageGetItemId(page, offnum);
            if (ItemIdIsRedirected(lp))