• Tom Lane's avatar
    Recognize self-contradictory restriction clauses for non-table relations. · 7741dd65
    Tom Lane authored
    The constraint exclusion feature checks for contradictions among scan
    restriction clauses, as well as contradictions between those clauses and a
    table's CHECK constraints.  The first aspect of this testing can be useful
    for non-table relations (such as subqueries or functions-in-FROM), but the
    feature was coded with only the CHECK case in mind so we were applying it
    only to plain-table RTEs.  Move the relation_excluded_by_constraints call
    so that it is applied to all RTEs not just plain tables.  With the default
    setting of constraint_exclusion this results in no extra work, but with
    constraint_exclusion = ON we will detect optimizations that we missed
    before (at the cost of more planner cycles than we expended before).
    
    Per a gripe from Gunnlaugur Þór Briem.  Experimentation with
    his example also showed we were not being very bright about the case where
    constraint exclusion is proven within a subquery within UNION ALL, so tweak
    the code to allow set_append_rel_pathlist to recognize such cases.
    7741dd65
planner.h 1.24 KB