postgresql/contrib
Tom Lane 9a785ad573 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:07 -05:00
..
adminpack adminpack: Add test suite 2017-09-14 22:22:59 -04:00
amcheck Minor code-cleanliness improvements for btree. 2017-09-18 16:36:28 -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:01 -05:00
btree_gin Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
btree_gist Change TRUE/FALSE to true/false 2017-11-08 11:37:28 -05:00
citext Disable multi-byte citext tests 2017-09-19 15:31:37 -04:00
cube Support index-only scans in contrib/cube and contrib/seg GiST indexes. 2017-11-20 20:25:18 -05:00
dblink Change TRUE/FALSE to true/false 2017-11-08 11:37:28 -05:00
dict_int Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
dict_xsyn Add some const decorations to prototypes 2017-11-10 13:38:57 -05:00
earthdistance Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
file_fdw Change TRUE/FALSE to true/false 2017-11-08 11:37:28 -05:00
fuzzystrmatch Add some const decorations to prototypes 2017-11-10 13:38:57 -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 Change TRUE/FALSE to true/false 2017-11-08 11:37:28 -05:00
isn isn: Fix debug code 2017-09-14 22:23:00 -04: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 Change tupledesc->attrs[n] to TupleDescAttr(tupledesc, n). 2017-08-20 11:19:07 -07:00
passwordcheck Simplify new test suite handling of passwordcheck 2017-11-02 12:57:04 -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 Add background worker type 2017-09-29 11:08:24 -04:00
pg_standby Fix assorted infelicities in new SetWALSegSize() function. 2017-09-24 12:05:06 -04:00
pg_stat_statements pg_stat_statements: Add a comment about the dangers of padding bytes. 2017-10-20 09:44:03 -04:00
pg_trgm Change TRUE/FALSE to true/false 2017-11-08 11:37:28 -05:00
pg_visibility Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04: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 Minor code-cleanliness improvements for btree. 2017-09-18 16:36:28 -04:00
postgres_fdw Fix creation of resjunk tlist entries for inherited mixed UPDATE/DELETE. 2017-11-27 17:54:07 -05:00
seg Support index-only scans in contrib/cube and contrib/seg GiST indexes. 2017-11-20 20:25:18 -05:00
sepgsql Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04: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 Change tupledesc->attrs[n] to TupleDescAttr(tupledesc, n). 2017-08-20 11:19:07 -07:00
tcn Change tupledesc->attrs[n] to TupleDescAttr(tupledesc, n). 2017-08-20 11:19:07 -07: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 Add some const decorations to prototypes 2017-11-10 13:38:57 -05:00
uuid-ossp Add some const decorations to prototypes 2017-11-10 13:38:57 -05: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
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.