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
auto_explain
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
citext
cube Post-feature-freeze pgindent run. 2018-04-26 14:47:16 -04:00
dblink
dict_int
dict_xsyn
earthdistance Improve English wording of some other getObjectDescription() messages. 2018-05-24 14:01:10 -04:00
file_fdw
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
intagg
intarray Don't fall off the end of perl functions 2018-05-27 09:08:42 -04:00
isn
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
ltree
ltree_plpython
oid2name
pageinspect printf("%lf") is not portable, so omit the "l". 2018-05-20 11:40:54 -04:00
passwordcheck
pg_buffercache
pg_freespacemap
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
pg_trgm Post-feature-freeze pgindent run. 2018-04-26 14:47:16 -04:00
pg_visibility
pgcrypto Make capitalization of term "OpenSSL" more consistent 2018-06-29 09:45:44 +09:00
pgrowlocks
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
sepgsql Update sepgsql regression test output for getObjectDescription() changes. 2018-05-24 16:11:25 -04:00
spi
sslinfo
start-scripts
tablefunc
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
tsm_system_time
unaccent
uuid-ossp
vacuumlo
xml2
contrib-global.mk
Makefile
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.