postgresql/contrib
Tom Lane a57aa430b6 Fix creation of resjunk tlist entries for inherited mixed UPDATE/DELETE.
rewriteTargetListUD's processing is dependent on the relkind of the query's
target table.  That was fine at the time it was made to act that way, even
for queries on inheritance trees, because all tables in an inheritance tree
would necessarily be plain tables.  However, the 9.5 feature addition
allowing some members of an inheritance tree to be foreign tables broke the
assumption that rewriteTargetListUD's output tlist could be applied to all
child tables with nothing more than column-number mapping.  This led to
visible failures if foreign child tables had row-level triggers, and would
also break in cases where child tables belonged to FDWs that used methods
other than CTID for row identification.

To fix, delay running rewriteTargetListUD until after the planner has
expanded inheritance, so that it is applied separately to the (already
mapped) tlist for each child table.  We can conveniently call it from
preprocess_targetlist.  Refactor associated code slightly to avoid the
need to heap_open the target relation multiple times during
preprocess_targetlist.  (The APIs remain a bit ugly, particularly around
the point of which steps scribble on parse->targetList and which don't.
But avoiding such scribbling would require a change in FDW callback APIs,
which is more pain than it's worth.)

Also fix ExecModifyTable to ensure that "tupleid" is reset to NULL when
we transition from rows providing a CTID to rows that don't.  (That's
really an independent bug, but it manifests in much the same cases.)

Add a regression test checking one manifestation of this problem, which
was that row-level triggers on a foreign child table did not work right.

Back-patch to 9.5 where the problem was introduced.

Etsuro Fujita, reviewed by Ildus Kurbangaliev and Ashutosh Bapat

Discussion: https://postgr.es/m/20170514150525.0346ba72@postgrespro.ru
2017-11-27 17:54:09 -05:00
..
adminpack Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
amcheck Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
auth_delay Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
auto_explain Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
bloom Tighten test in contrib/bloom/t/001_wal.pl. 2017-11-10 12:30:06 -05:00
btree_gin Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
btree_gist Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
chkpass Further cleanup from the strong-random patch. 2016-12-12 11:55:32 +02:00
citext Optimize joins when the inner relation can be proven unique. 2017-04-07 22:20:13 -04:00
cube Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
dblink Remove uses of "slave" in replication contexts 2017-08-10 22:55:41 -04:00
dict_int Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
dict_xsyn Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
earthdistance Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
file_fdw Even if some partitions are foreign, allow tuple routing. 2017-09-07 10:59:28 -04:00
fuzzystrmatch Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
hstore Avoid formally-undefined use of memcpy() in hstoreUniquePairs(). 2017-11-25 14:42:25 -05:00
hstore_plperl PL/Perl portability fix: absorb relevant -D switches from Perl. 2017-07-28 14:25:28 -04:00
hstore_plpython Drop support for Python 2.3 2017-02-21 09:49:22 -05:00
intagg Schema-qualify some references to regprocedure. 2016-06-10 10:41:58 -04:00
intarray Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
isn Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
lo Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
ltree Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
ltree_plpython Code review for avoidance of direct cross-module links. 2017-02-02 11:21:16 -05:00
oid2name Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
pageinspect hash: Increase the number of possible overflow bitmaps by 8x. 2017-08-04 16:30:32 -04:00
passwordcheck Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04: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 Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
pg_standby Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
pg_stat_statements Code review for NextValueExpr expression node type. 2017-07-14 15:25:43 -04:00
pg_trgm Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
pg_visibility Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
pgcrypto Forbid gen_random_uuid() with --disable-strong-random 2017-07-03 12:10:11 +03:00
pgrowlocks Teach pgrowlocks to check relkind before scanning 2017-06-21 23:19:13 -04:00
pgstattuple pgstatindex: Insert some casts to prevent overflow. 2017-08-10 11:48:42 -04:00
postgres_fdw Fix creation of resjunk tlist entries for inherited mixed UPDATE/DELETE. 2017-11-27 17:54:09 -05:00
seg Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
sepgsql Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
spi Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
sslinfo Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
start-scripts Provide modern examples of how to auto-start Postgres on macOS. 2017-11-17 12:47:11 -05:00
tablefunc Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
tcn Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
test_decoding Fix crash when logical decoding is invoked from a PL function. 2017-10-06 19:18:58 -04:00
tsm_system_rows Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
tsm_system_time Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
unaccent Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
uuid-ossp Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
vacuumlo Initial pgindent run with pg_bsd_indent version 2.0. 2017-06-21 14:39:04 -04:00
xml2 Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
contrib-global.mk Respect TEMP_CONFIG when pg_regress_check and friends are called 2016-02-27 12:28:21 -05:00
Makefile Add amcheck extension to contrib. 2017-03-09 16:33:02 -08:00
README Rename 'gmake' to 'make' in docs and recommended commands 2014-02-12 17:29:19 -05:00

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.