• Tom Lane's avatar
    Fix SELECT DISTINCT with index-optimized MIN/MAX on inheritance trees. · d3237e04
    Tom Lane authored
    In a query such as "SELECT DISTINCT min(x) FROM tab", the DISTINCT is
    pretty useless (there being only one output row), but nonetheless it
    shouldn't fail.  But it could fail if "tab" is an inheritance parent,
    because planagg.c's code for fixing up equivalence classes after making the
    index-optimized MIN/MAX transformation wasn't prepared to find child-table
    versions of the aggregate expression.  The least ugly fix seems to be
    to add an option to mutate_eclass_expressions() to skip child-table
    equivalence class members, which aren't used anymore at this stage of
    planning so it's not really necessary to fix them.  Since child members
    are ignored in many cases already, it seems plausible for
    mutate_eclass_expressions() to have an option to ignore them too.
    
    Per bug #7703 from Maxim Boguk.
    
    Back-patch to 9.1.  Although the same code exists before that, it cannot
    encounter child-table aggregates AFAICS, because the index optimization
    transformation cannot succeed on inheritance trees before 9.1 (for lack
    of MergeAppend).
    d3237e04
equivclass.c 74 KB