Demote pg_unreachable() in heapam to an assertion.
authorPeter Geoghegan <[email protected]>
Fri, 29 Oct 2021 17:53:48 +0000 (10:53 -0700)
committerPeter Geoghegan <[email protected]>
Fri, 29 Oct 2021 17:53:48 +0000 (10:53 -0700)
Commit d168b66682, which overhauled index deletion, added a
pg_unreachable() to the end of a sort comparator used when sorting heap
TIDs from an index page.  This allows the compiler to apply
optimizations that assume that the heap TIDs from the index AM must
always be unique.

That doesn't seem like a good idea now, given recent reports of
corruption involving duplicate TIDs in indexes on Postgres 14.  Demote
to an assertion, just in case.

Backpatch: 14-, where index deletion was overhauled.

src/backend/access/heap/heapam.c

index 2da2be16969fc710dc32701bbd936061768738cc..fecb9728683b272e00f63ec3ae772b25fadd7ace 100644 (file)
@@ -7586,7 +7586,7 @@ index_delete_sort_cmp(TM_IndexDelete *deltid1, TM_IndexDelete *deltid2)
                        return (pos1 < pos2) ? -1 : 1;
        }
 
-       pg_unreachable();
+       Assert(false);
 
        return 0;
 }