• Peter Geoghegan's avatar
    Allow amcheck to re-find tuples using new search. · c1afd175
    Peter Geoghegan authored
    Teach contrib/amcheck's bt_index_parent_check() function to take
    advantage of the uniqueness property of heapkeyspace indexes in support
    of a new verification option: non-pivot tuples (non-highkey tuples on
    the leaf level) can optionally be re-found using a new search for each,
    that starts from the root page.  If a tuple cannot be re-found, report
    that the index is corrupt.
    
    The new "rootdescend" verification option is exhaustive, and can
    therefore make a call to bt_index_parent_check() take a lot longer.
    Re-finding tuples during verification is mostly intended as an option
    for backend developers, since the corruption scenarios that it alone is
    uniquely capable of detecting seem fairly far-fetched.
    
    For example, "rootdescend" verification is much more likely to detect
    corruption of the least significant byte of a key from a pivot tuple in
    the root page of a B-Tree that already has at least three levels.
    Typically, only a few tuples on a cousin leaf page are at risk of
    "getting overlooked" by index scans in this scenario.  The corrupt key
    in the root page is only slightly corrupt: corrupt enough to give wrong
    answers to some queries, and yet not corrupt enough to allow the problem
    to be detected without verifying agreement between the leaf page and the
    root page, skipping at least one internal page level.  The existing
    bt_index_parent_check() checks never cross more than a single level.
    
    Author: Peter Geoghegan
    Reviewed-By: Heikki Linnakangas
    Discussion: https://postgr.es/m/CAH2-Wz=yTWnVu+HeHGKb2AGiADL9eprn-cKYAto4MkKOuiGtRQ@mail.gmail.com
    c1afd175
Makefile 510 Bytes