Remove overzealous _bt_killitems assertion.
authorPeter Geoghegan <[email protected]>
Fri, 10 Oct 2025 18:52:19 +0000 (14:52 -0400)
committerPeter Geoghegan <[email protected]>
Fri, 10 Oct 2025 18:52:19 +0000 (14:52 -0400)
An assertion in _bt_killitems expected the scan's currPos state to
contain a valid LSN, saved from when currPos's page was initially read.
The assertion failed to account for the fact that even logged relations
can have leaf pages with an invalid LSN when built with wal_level set to
"minimal".  Remove the faulty assertion.

Oversight in commit e6eed40e (though note that the assertion was
backpatched to stable branches before 18 by commit 7c319f54).

Author: Peter Geoghegan <[email protected]>
Reported-By: Matthijs van der Vleuten <[email protected]>
Bug: #19082
Discussion: https://postgr.es/m/19082-628e62160dbbc1c1@postgresql.org
Backpatch-through: 13

src/backend/access/nbtree/nbtutils.c

index 5873b61acfbec4b79a5b3e48a0f37fca908eb0a5..f81afbf7b3bbd0b43391e258bff57fe5e189c557 100644 (file)
@@ -1779,7 +1779,6 @@ _bt_killitems(IndexScanDesc scan)
        buf = _bt_getbuf(scan->indexRelation, so->currPos.currPage, BT_READ);
 
        latestlsn = BufferGetLSNAtomic(buf);
-       Assert(!XLogRecPtrIsInvalid(so->currPos.lsn));
        Assert(so->currPos.lsn <= latestlsn);
        if (so->currPos.lsn != latestlsn)
        {