• Teodor Sigaev's avatar
    Adjust INCLUDE index truncation comments and code. · 075aade4
    Teodor Sigaev authored
    Add several assertions that ensure that we're dealing with a pivot tuple
    without non-key attributes where that's expected.  Also, remove the
    assertion within _bt_isequal(), restoring the v10 function signature.  A
    similar check will be performed for the page highkey within
    _bt_moveright() in most cases.  Also avoid dropping all objects within
    regression tests, to increase pg_dump test coverage for INCLUDE indexes.
    
    Rather than using infrastructure that's generally intended to be used
    with reference counted heap tuple descriptors during truncation, use the
    same function that was introduced to store flat TupleDescs in shared
    memory (we use a temp palloc'd buffer).  This isn't strictly necessary,
    but seems more future-proof than the old approach.  It also lets us
    avoid including rel.h within indextuple.c, which was arguably a
    modularity violation.  Also, we now call index_deform_tuple() with the
    truncated TupleDesc, not the source TupleDesc, since that's more robust,
    and saves a few cycles.
    
    In passing, fix a memory leak by pfree'ing truncated pivot tuple memory
    during CREATE INDEX.  Also pfree during a page split, just to be
    consistent.
    
    Refactor _bt_check_natts() to be more readable.
    
    Author: Peter Geoghegan with some editorization by me
    Reviewed by: Alexander Korotkov, Teodor Sigaev
    Discussion: https://www.postgresql.org/message-id/CAH2-Wz%3DkCWuXeMrBCopC-tFs3FbiVxQNjjgNKdG2sHxZ5k2y3w%40mail.gmail.com
    075aade4
index_including.out 17.1 KB