• Teodor Sigaev's avatar
    Fix wrong validation of top-parent pointer during page deletion in Btree. · 6db4b499
    Teodor Sigaev authored
    After introducing usage of t_tid of inner or page high key for storing
    number of attributes of tuple, validation of tuple's ItemPointer with
    ItemPointerIsValid becomes incorrect, it's need to validate only blocknumber of
    ItemPointer. Missing this causes a incorrect page deletion, fix that. Test is
    added.
    
    BTW, current contrib/amcheck doesn't fail on index corrupted by this way.
    
    Also introduce BTreeTupleGetTopParent/BTreeTupleSetTopParent macroses to improve
    code readability and to avoid possible confusion with page high key: high key
    is used to store top-parent link for branch to remove.
    
    Bug found by Michael Paquier, but bug doesn't exist in previous versions because
    t_tid was set to P_HIKEY.
    
    Author: Teodor Sigaev
    Reviewer: Peter Geoghegan
    Discussion: https://www.postgresql.org/message-id/flat/20180419052436.GA16000%40paquier.xyz
    6db4b499
create_index.out 130 KB