]> granicus.if.org Git - postgresql/commit
postgres_fdw: Avoid 'outer pathkeys do not match mergeclauses' error.
authorRobert Haas <rhaas@postgresql.org>
Wed, 17 Jan 2018 21:18:39 +0000 (16:18 -0500)
committerRobert Haas <rhaas@postgresql.org>
Wed, 17 Jan 2018 21:57:53 +0000 (16:57 -0500)
commit3f05a30b50a7e283d2664719c2fa0832fcd37da0
tree4e8913cbf24f69eb6e44117678377b7338962e62
parent8b89b7aaca42d9f1b0798aebb84b088dd0b092fa
postgres_fdw: Avoid 'outer pathkeys do not match mergeclauses' error.

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
contrib/postgres_fdw/expected/postgres_fdw.out
contrib/postgres_fdw/postgres_fdw.c
contrib/postgres_fdw/sql/postgres_fdw.sql