• Tom Lane's avatar
    Fix eclass_useful_for_merging to give valid results for appendrel children. · cde35cf4
    Tom Lane authored
    Formerly, this function would always return "true" for an appendrel child
    relation, because it would think that the appendrel parent was a potential
    join target for the child.  In principle that should only lead to some
    inefficiency in planning, but fuzz testing by Andreas Seltenreich disclosed
    that it could lead to "could not find pathkey item to sort" planner errors
    in odd corner cases.  Specifically, we would think that all columns of a
    child table's multicolumn index were interesting pathkeys, causing us to
    generate a MergeAppend path that sorts by all the columns.  However, if any
    of those columns weren't actually used above the level of the appendrel,
    they would not get added to that rel's targetlist, which would result in
    being unable to resolve the MergeAppend's sort keys against its targetlist
    during createplan.c.
    
    Backpatch to 9.3.  In older versions, columns of an appendrel get added
    to its targetlist even if they're not mentioned above the scan level,
    so that the failure doesn't occur.  It might be worth back-patching this
    fix to older versions anyway, but I'll refrain for the moment.
    cde35cf4
pathkeys.c 46.3 KB