]> 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 22:09:20 +0000 (17:09 -0500)
commit4a81c022975ec786b26ec8af6b7d8527319bf445
tree4fde12cd588f873ba037d318cff708ced9dc0aa7
parentf082ef83688b036437e580f42894f674534fdb24
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