postgresql/contrib
Jeff Davis a45adc747e Fix WITH CHECK OPTION on views referencing postgres_fdw tables.
If a view references a foreign table, and the foreign table has a
BEFORE INSERT trigger, then it's possible for a tuple inserted or
updated through the view to be changed such that it violates the
view's WITH CHECK OPTION constraint.

Before this commit, postgres_fdw handled this case inconsistently. A
RETURNING clause on the INSERT or UPDATE statement targeting the view
would cause the finally-inserted tuple to be read back, and the WITH
CHECK OPTION violation would throw an error. But without a RETURNING
clause, postgres_fdw would not read the final tuple back, and WITH
CHECK OPTION would not throw an error for the violation (or may throw
an error when there is no real violation). AFTER ROW triggers on the
foreign table had a similar effect as a RETURNING clause on the INSERT
or UPDATE statement.

To fix, this commit retrieves the attributes needed to enforce the
WITH CHECK OPTION constraint along with the attributes needed for the
RETURNING clause (if any) from the remote side. Thus, the WITH CHECK
OPTION constraint is always evaluated against the final tuple after
any triggers on the remote side.

This fix may be considered inconsistent with CHECK constraints
declared on foreign tables, which are not enforced locally at all
(because the constraint is on a remote object). The discussion
concluded that this difference is reasonable, because the WITH CHECK
OPTION is a constraint on the local view (not any remote object);
therefore it only makes sense to enforce its WITH CHECK OPTION
constraint locally.

Author: Etsuro Fujita
Reviewed-by: Arthur Zakirov, Stephen Frost
Discussion: https://www.postgresql.org/message-id/7eb58fab-fd3b-781b-ac33-f7cfec96021f%40lab.ntt.co.jp
2018-07-08 16:53:36 -07:00
..
adminpack adminpack: Revoke EXECUTE on pg_logfile_rotate() 2018-05-07 10:10:33 -04:00
amcheck Post-feature-freeze pgindent run. 2018-04-26 14:47:16 -04:00
auth_delay Update copyright for 2018 2018-01-02 23:30:12 -05:00
auto_explain Allow auto_explain.log_min_duration to go up to INT_MAX. 2018-02-23 14:39:17 -05:00
bloom Don't fall off the end of perl functions 2018-05-27 09:08:42 -04:00
btree_gin Clean up warnings from -Wimplicit-fallthrough. 2018-05-01 19:35:08 -04:00
btree_gist Fix assorted issues in convert_to_scalar(). 2018-03-03 20:31:35 -05:00
citext Disable multi-byte citext tests 2017-09-19 15:31:37 -04:00
cube Post-feature-freeze pgindent run. 2018-04-26 14:47:16 -04:00
dblink Indexes with INCLUDE columns and their support in B-tree 2018-04-07 23:00:39 +03:00
dict_int Avoid unnecessary use of pg_strcasecmp for already-downcased identifiers. 2018-01-26 18:25:14 -05:00
dict_xsyn Avoid unnecessary use of pg_strcasecmp for already-downcased identifiers. 2018-01-26 18:25:14 -05:00
earthdistance Improve English wording of some other getObjectDescription() messages. 2018-05-24 14:01:10 -04:00
file_fdw Allow insert and update tuple routing and COPY for foreign tables. 2018-04-06 19:22:03 -04:00
fuzzystrmatch Replace search.cpan.org with metacpan.org 2018-06-29 22:02:20 +09:00
hstore Fix assorted compiler warnings seen in the buildfarm. 2018-05-02 15:52:54 -04:00
hstore_plperl Fix contrib/hstore_plperl to look through scalar refs. 2018-06-18 15:55:06 -04:00
hstore_plpython Prevent accidental linking of system-supplied copies of libpq.so etc. 2018-04-03 16:26:05 -04:00
intagg Schema-qualify some references to regprocedure. 2016-06-10 10:41:58 -04:00
intarray Don't fall off the end of perl functions 2018-05-27 09:08:42 -04:00
isn Update copyright for 2018 2018-01-02 23:30:12 -05:00
jsonb_plperl Fix jsonb_plperl to convert Perl UV values correctly. 2018-06-18 17:39:57 -04:00
jsonb_plpython Fix memory leak in PLySequence_ToJsonbValue() 2018-06-15 15:01:46 +03: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 Prevent accidental linking of system-supplied copies of libpq.so etc. 2018-04-03 16:26:05 -04:00
oid2name Switch client-side code to include catalog/pg_foo_d.h not pg_foo.h. 2018-04-08 13:59:52 -04:00
pageinspect printf("%lf") is not portable, so omit the "l". 2018-05-20 11:40:54 -04: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 Avoid portability issues in autoprewarm.c. 2018-05-03 12:50:34 -04:00
pg_standby pg_standby: Remove code for .backup files 2018-07-01 15:10:08 +02:00
pg_stat_statements Reorganize partitioning code 2018-04-14 21:12:14 -03:00
pg_trgm Post-feature-freeze pgindent run. 2018-04-26 14:47:16 -04:00
pg_visibility Update copyright for 2018 2018-01-02 23:30:12 -05:00
pgcrypto Make capitalization of term "OpenSSL" more consistent 2018-06-29 09:45:44 +09:00
pgrowlocks Replace AclObjectKind with ObjectType 2018-01-19 14:01:15 -05:00
pgstattuple pgstatindex, pageinspect: handle partitioned indexes 2018-05-09 14:22:59 -03:00
postgres_fdw Fix WITH CHECK OPTION on views referencing postgres_fdw tables. 2018-07-08 16:53:36 -07:00
seg Support index-only scans in contrib/cube and contrib/seg GiST indexes. 2017-11-20 20:25:18 -05:00
sepgsql Update sepgsql regression test output for getObjectDescription() changes. 2018-05-24 16:11:25 -04:00
spi Prevent accidental linking of system-supplied copies of libpq.so etc. 2018-04-03 16:26:05 -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 Post-feature-freeze pgindent run. 2018-04-26 14:47:16 -04:00
test_decoding Reduce cost of test_decoding's new oldest_xmin test 2018-07-05 16:37:32 -04: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 Avoid unnecessary use of pg_strcasecmp for already-downcased identifiers. 2018-01-26 18:25:14 -05:00
uuid-ossp Update copyright for 2018 2018-01-02 23:30:12 -05:00
vacuumlo Switch client-side code to include catalog/pg_foo_d.h not pg_foo.h. 2018-04-08 13:59:52 -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 Transforms for jsonb to PL/Perl 2018-04-03 09:47:18 -04: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.