• Tom Lane's avatar
    Speed up planning when partitions can be pruned at plan time. · 428b260f
    Tom Lane authored
    Previously, the planner created RangeTblEntry and RelOptInfo structs
    for every partition of a partitioned table, even though many of them
    might later be deemed uninteresting thanks to partition pruning logic.
    This incurred significant overhead when there are many partitions.
    Arrange to postpone creation of these data structures until after
    we've processed the query enough to identify restriction quals for
    the partitioned table, and then apply partition pruning before not
    after creation of each partition's data structures.  In this way
    we need not open the partition relations at all for partitions that
    the planner has no real interest in.
    
    For queries that can be proven at plan time to access only a small
    number of partitions, this patch improves the practical maximum
    number of partitions from under 100 to perhaps a few thousand.
    
    Amit Langote, reviewed at various times by Dilip Kumar, Jesper Pedersen,
    Yoshikazu Imai, and David Rowley
    
    Discussion: https://postgr.es/m/9d7c5112-cb99-6a47-d3be-cf1ee6862a1d@lab.ntt.co.jp
    428b260f
planner.c 233 KB