• David Rowley's avatar
    Add TID Range Scans to support efficient scanning ranges of TIDs · bb437f99
    David Rowley authored
    This adds a new executor node named TID Range Scan.  The query planner
    will generate paths for TID Range scans when quals are discovered on base
    relations which search for ranges on the table's ctid column.  These
    ranges may be open at either end. For example, WHERE ctid >= '(10,0)';
    will return all tuples on page 10 and over.
    
    To support this, two new optional callback functions have been added to
    table AM.  scan_set_tidrange is used to set the scan range to just the
    given range of TIDs.  scan_getnextslot_tidrange fetches the next tuple
    in the given range.
    
    For AMs were scanning ranges of TIDs would not make sense, these functions
    can be set to NULL in the TableAmRoutine.  The query planner won't
    generate TID Range Scan Paths in that case.
    
    Author: Edmund Horner, David Rowley
    Reviewed-by: David Rowley, Tomas Vondra, Tom Lane, Andres Freund, Zhihong Yu
    Discussion: https://postgr.es/m/CAMyN-kB-nFTkF=VA_JPwFNo08S0d-Yk0F741S2B7LDmYAi8eyA@mail.gmail.com
    bb437f99
parallel_schedule 4.81 KB