Re: nbtree: assertion failure in _bt_killitems() for posting tuple
Peter Geoghegan <pg@bowt.ie>
From: Peter Geoghegan <pg@bowt.ie>
To: Anastasia Lubennikova <a.lubennikova@postgrespro.ru>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2020-04-06T00:15:07Z
Lists: pgsql-hackers
Attachments
- v1-0001-Fix-assertion-failure-in-_bt_killitems.patch (application/octet-stream) patch v1-0001
On Tue, Mar 24, 2020 at 1:00 AM Anastasia Lubennikova <a.lubennikova@postgrespro.ru> wrote: > > I think you're right. However, it still seems like we should check > > that "kitem->indexOffset" is consistent among all of the BTScanPosItem > > entries that we have for each TID that we believe to be from the same > > posting list tuple. The assertion failure happens in the logical replication worker because it uses a dirty snapshot, which cannot release the pin per commit 2ed5b87f. This means that the leaf page can change between the time that we observe an item is dead, and the time we reach _bt_killitems(), even though _bt_killitems() does get to kill items. I am thinking about pushing a fix along the lines of the attached patch. This preserves the assertion, while avoiding the check in cases where it doesn't apply, such as when a dirty snapshot is in use. -- Peter Geoghegan
Commits
-
Fix nbtree kill_prior_tuple posting list assert.
- ce2cee0ade8a 13.0 landed
-
Reduce pinning and buffer content locking for btree scans.
- 2ed5b87f96d4 9.5.0 cited