Corrupted btree index on HEAD because of covering indexes
Michael Paquier <michael@paquier.xyz>
From: Michael Paquier <michael@paquier.xyz>
To: Postgres hackers <pgsql-hackers@postgresql.org>
Cc: Peter Geoghegan <pg@bowt.ie>, Anastasia Lubennikova <a.lubennikova@postgrespro.ru>, Teodor Sigaev <teodor@sigaev.ru>
Date: 2018-04-19T05:24:36Z
Lists: pgsql-hackers
Hi all, I was just testing the VACUUM truncation logic, and bumped into what looks like a corrupted btree index. Here is a reproducer: create table aa (a int primary key, b bool); insert into aa values (generate_series(1,1000000), false); checkpoint; update aa set b = false where a > 500000; -- Dirties a set of shared buffers delete from aa where a > 750000; -- Delete a set of rows vacuum aa; delete from aa where a > 10; vacuum aa; -- error on btree with right sibling And here is the actual failure when the second vacuum: ERROR: XX000: right sibling 4132 of block 2128 is not next child 5396 of block 412 in index "aa_pkey" LOCATION: _bt_mark_page_halfdead, nbtpage.c:1564 This works on REL_10_STABLE, so I am adding an open item. I have not investigated the exact problem yet, but bisect is showing me covering indexes as the culprit (8224de4). Thanks, -- Michael
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