• Robert Haas's avatar
    postgres_fdw: Avoid 'outer pathkeys do not match mergeclauses' error. · 4bbf6edf
    Robert Haas authored
    When pushing down a join to a foreign server, postgres_fdw constructs
    an alternative plan to be used for any EvalPlanQual rechecks that
    prove to be necessary.  This plan is stored as the outer subplan of
    the Foreign Scan implementing the pushed-down join.  Previously, this
    alternative plan could have a different nominal sort ordering than its
    parent, which seemed OK since there will only be one tuple per base
    table anyway in the case of an EvalPlanQual recheck.  Actually,
    though, it caused a problem if that path was used as a building block
    for the EvalPlanQual recheck plan of a higher-level foreign join,
    because we could end up with a merge join one of whose inputs was not
    labelled with the correct sort order.  Repair by injecting an extra
    Sort node into the EvalPlanQual recheck plan whenever it would
    otherwise fail to be sorted at least as well as its parent Foreign
    Scan.
    
    Report by Jeff Janes.  Patch by me, reviewed by Tom Lane, who also
    provided the test case and comment text.
    
    Discussion: http://postgr.es/m/CAMkU=1y2G8VOVBHv3iXU2TMAj7-RyBFFW1uhkr5sm9LQ2=X35g@mail.gmail.com
    4bbf6edf
postgres_fdw.c 155 KB