postgresql/contrib
Robert Haas 4bbf6edfbd 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
2018-01-17 16:18:39 -05:00
..
adminpack Update copyright for 2018 2018-01-02 23:30:12 -05:00
amcheck Update copyright for 2018 2018-01-02 23:30:12 -05:00
auth_delay Update copyright for 2018 2018-01-02 23:30:12 -05:00
auto_explain Update copyright for 2018 2018-01-02 23:30:12 -05:00
bloom Update copyright for 2018 2018-01-02 23:30:12 -05:00
btree_gin Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
btree_gist Consistently use PG_INT(16|32|64)_(MIN|MAX). 2017-12-12 18:19:13 -08:00
citext Disable multi-byte citext tests 2017-09-19 15:31:37 -04:00
cube llow negative coordinate for ~> (cube, int) operator 2018-01-11 14:49:36 +03:00
dblink Update copyright for 2018 2018-01-02 23:30:12 -05:00
dict_int Update copyright for 2018 2018-01-02 23:30:12 -05:00
dict_xsyn Update copyright for 2018 2018-01-02 23:30:12 -05:00
earthdistance Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
file_fdw Update copyright for 2018 2018-01-02 23:30:12 -05:00
fuzzystrmatch Update copyright for 2018 2018-01-02 23:30:12 -05:00
hstore Avoid formally-undefined use of memcpy() in hstoreUniquePairs(). 2017-11-25 14:42:10 -05:00
hstore_plperl Make DatumGetFoo/PG_GETARG_FOO/PG_RETURN_FOO macro names more consistent. 2017-09-18 15:21:23 -04:00
hstore_plpython Consistently catch errors from Python _New() functions 2017-11-18 13:39:53 -05:00
intagg Schema-qualify some references to regprocedure. 2016-06-10 10:41:58 -04:00
intarray Update copyright for 2018 2018-01-02 23:30:12 -05:00
isn Update copyright for 2018 2018-01-02 23:30:12 -05:00
lo lo: Add test suite 2017-09-14 22:22:59 -04:00
ltree Change TRUE/FALSE to true/false 2017-11-08 11:37:28 -05:00
ltree_plpython Consistently catch errors from Python _New() functions 2017-11-18 13:39:53 -05:00
oid2name Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
pageinspect Fix new test case to not be endian-dependent. 2018-01-04 16:00:21 -05:00
passwordcheck Update copyright for 2018 2018-01-02 23:30:12 -05:00
pg_buffercache Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
pg_freespacemap Default monitoring roles 2017-03-30 14:18:53 -04:00
pg_prewarm Update copyright for 2018 2018-01-02 23:30:12 -05:00
pg_standby Fix assorted infelicities in new SetWALSegSize() function. 2017-09-24 12:05:06 -04:00
pg_stat_statements Update copyright for 2018 2018-01-02 23:30:12 -05:00
pg_trgm Update copyright for 2018 2018-01-02 23:30:12 -05:00
pg_visibility Update copyright for 2018 2018-01-02 23:30:12 -05:00
pgcrypto Add some const decorations to prototypes 2017-11-10 13:38:57 -05:00
pgrowlocks Teach pgrowlocks to check relkind before scanning 2017-06-21 23:19:13 -04:00
pgstattuple Update copyright for 2018 2018-01-02 23:30:12 -05:00
postgres_fdw postgres_fdw: Avoid 'outer pathkeys do not match mergeclauses' error. 2018-01-17 16:18:39 -05:00
seg Support index-only scans in contrib/cube and contrib/seg GiST indexes. 2017-11-20 20:25:18 -05:00
sepgsql Update copyright for 2018 2018-01-02 23:30:12 -05:00
spi Document and use SPI_result_code_string() 2017-10-04 22:14:21 -04:00
sslinfo Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
start-scripts Remove contrib/start-scripts/osx/. 2017-11-17 12:53:20 -05:00
tablefunc Update copyright for 2018 2018-01-02 23:30:12 -05:00
tcn Update copyright for 2018 2018-01-02 23:30:12 -05:00
test_decoding Ability to advance replication slots 2018-01-17 11:38:34 +00:00
tsm_system_rows Update copyright for 2018 2018-01-02 23:30:12 -05:00
tsm_system_time Update copyright for 2018 2018-01-02 23:30:12 -05:00
unaccent Update copyright for 2018 2018-01-02 23:30:12 -05:00
uuid-ossp Update copyright for 2018 2018-01-02 23:30:12 -05:00
vacuumlo Update copyright for 2018 2018-01-02 23:30:12 -05:00
xml2 Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
Makefile Remove contrib/chkpass 2017-09-22 11:49:48 -04:00
README Rename 'gmake' to 'make' in docs and recommended commands 2014-02-12 17:29:19 -05:00
contrib-global.mk Respect TEMP_CONFIG when pg_regress_check and friends are called 2016-02-27 12:28:21 -05:00

README

The PostgreSQL contrib tree
---------------------------

This subtree contains porting tools, analysis utilities, and plug-in
features that are not part of the core PostgreSQL system, mainly
because they address a limited audience or are too experimental to be
part of the main source tree.  This does not preclude their
usefulness.

User documentation for each module appears in the main SGML
documentation.

When building from the source distribution, these modules are not
built automatically, unless you build the "world" target.  You can
also build and install them all by running "make all" and "make
install" in this directory; or to build and install just one selected
module, do the same in that module's subdirectory.

Some directories supply new user-defined functions, operators, or
types.  To make use of one of these modules, after you have installed
the code you need to register the new SQL objects in the database
system by executing a CREATE EXTENSION command.  In a fresh database,
you can simply do

    CREATE EXTENSION module_name;

See the PostgreSQL documentation for more information about this
procedure.