Re: Corrupted btree index on HEAD because of covering indexes
Peter Geoghegan <pg@bowt.ie>
From: Peter Geoghegan <pg@bowt.ie>
To: Alexander Korotkov <a.korotkov@postgrespro.ru>
Cc: Teodor Sigaev <teodor@sigaev.ru>, Michael Paquier <michael@paquier.xyz>, Postgres hackers <pgsql-hackers@postgresql.org>, Anastasia Lubennikova <a.lubennikova@postgrespro.ru>
Date: 2018-04-20T00:52:02Z
Lists: pgsql-hackers
On Thu, Apr 19, 2018 at 2:00 PM, Alexander Korotkov <a.korotkov@postgrespro.ru> wrote: > - if (ItemPointerIsValid(leafhikey)) > + if (ItemPointerGetBlockNumberNoCheck(leafhikey) != InvalidBlockNumber) > > Should we use BTreeInnerTupleGetDownLink() as soon as we use > BTreeInnerTupleSetDownLink() for setting this? > Or even invent BTreeInnerTupleDownLinkIsValid() macro? +1 to at least using BTreeInnerTupleGetDownLink(). I think it's okay to use ItemPointerGetBlockNumberNoCheck() in amcheck, because it's inconvenient for amcheck to know if it's on the leaf level or not (it's rather low-context code). However, the nbtree code doesn't have that problem, and already has very few places that could possibly need ItemPointerGetBlockNumberNoCheck(). In fact, Teodor's fix touches the only remaining ItemPointerGetBlockNumberNoCheck() caller code within all of nbtree. In summary, I think that we should find a way to never use ItemPointerGetBlockNumberNoCheck() in nbtree, while still using it in amcheck. -- Peter Geoghegan
Commits
-
Add missing and dangling downlink checks to amcheck
- 4eaf7eaccb29 11.0 landed
-
Fix wrong validation of top-parent pointer during page deletion in Btree.
- 6db4b49986be 11.0 landed
-
Add integrity-checking functions to pg_visibility.
- e472ce9624e0 9.6.0 cited
-
Make the handling of interrupted B-tree page splits more robust.
- 40dae7ec537c 9.4.0 cited