postgresql/contrib
Tom Lane 185279da3f Fix crash when logical decoding is invoked from a PL function.
The logical decoding functions do BeginInternalSubTransaction and
RollbackAndReleaseCurrentSubTransaction to clean up after themselves.
It turns out that AtEOSubXact_SPI has an unrecognized assumption that
we always need to cancel the active SPI operation in the SPI context
that surrounds the subtransaction (if there is one).  That's true
when the RollbackAndReleaseCurrentSubTransaction call is coming from
the SPI-using function itself, but not when it's happening inside
some unrelated function invoked by a SPI query.  In practice the
affected callers are the various PLs.

To fix, record the current subtransaction ID when we begin a SPI
operation, and clean up only if that ID is the subtransaction being
canceled.

Also, remove AtEOSubXact_SPI's assertion that it must have cleaned
up the surrounding SPI context's active tuptable.  That's proven
wrong by the same test case.

Also clarify (or, if you prefer, reinterpret) the calling conventions
for _SPI_begin_call and _SPI_end_call.  The memory context cleanup
in the latter means that these have always had the flavor of a matched
resource-management pair, but they weren't documented that way before.

Per report from Ben Chobot.

Back-patch to 9.4 where logical decoding came in.  In principle,
the SPI changes should go all the way back, since the problem dates
back to commit 7ec1c5a86.  But given the lack of field complaints
it seems few people are using internal subtransactions in this way.
So I don't feel a need to take any risks in 9.2/9.3.

Discussion: https://postgr.es/m/73FBA179-C68C-4540-9473-71E865408B15@silentmedia.com
2017-10-06 19:18:58 -04:00
..
adminpack Fix pg_file_write() error handling. 2017-03-12 19:35:49 -04:00
auth_delay Update copyright for 2016 2016-01-02 14:19:48 -05:00
auto_explain pgindent run for 9.6 2016-06-09 18:02:36 -04:00
bloom Fix typos in comments. 2017-02-06 11:34:15 +02:00
btree_gin Make contrib regression tests safe for Danish locale. 2016-07-21 16:52:35 -04:00
btree_gist Handle contrib's GIN/GIST support function signature changes honestly. 2016-06-09 16:44:25 -04:00
chkpass Avoid returning undefined bytes in chkpass_in(). 2015-02-14 12:20:56 -05:00
citext Repair damage done by citext--1.1--1.2.sql. 2016-07-26 15:32:57 -04:00
cube Fix typos in comments. 2017-02-06 11:34:15 +02:00
dblink Fix ancient connection leak in dblink 2017-03-11 13:32:26 -08:00
dict_int Update copyright for 2016 2016-01-02 13:33:40 -05:00
dict_xsyn Update copyright for 2016 2016-01-02 13:33:40 -05:00
earthdistance Fix typos in comments. 2017-02-06 11:34:15 +02:00
file_fdw Add macros to make AllocSetContextCreate() calls simpler and safer. 2016-08-27 17:50:38 -04:00
fuzzystrmatch Update fuzzystrmatch extension for parallel query. 2016-06-07 11:26:41 -04:00
hstore Update extensions with GIN/GIST support for parallel query. 2016-06-14 13:34:37 -04:00
hstore_plperl PL/Perl portability fix: absorb relevant -D switches from Perl. 2017-07-31 12:38:35 -04:00
hstore_plpython Minor fixes in contrib installation scripts. 2016-06-14 10:47:06 -04:00
intagg Schema-qualify some references to regprocedure. 2016-06-10 10:41:58 -04:00
intarray Fix -e option in contrib/intarray/bench/bench.pl. 2016-08-17 15:51:10 -04:00
isn Fix typos in comments. 2017-02-06 11:34:15 +02:00
lo Update lo extension for parallel query. 2016-06-07 11:26:42 -04:00
ltree Spelling fixes 2017-03-14 13:45:54 -04:00
ltree_plpython Minor fixes in contrib installation scripts. 2016-06-14 10:47:06 -04:00
oid2name Add file version information to most installed Windows binaries. 2014-07-14 14:07:52 -04:00
pageinspect Back-patch portability fixes for contrib/pageinspect/ginfuncs.c. 2016-11-04 12:37:29 -04:00
passwordcheck Update copyright for 2016 2016-01-02 13:33:40 -05:00
pg_buffercache pg_buffercache: Allow huge allocations. 2016-09-15 09:30:37 -04:00
pg_freespacemap Update pg_freespacemap extension for parallel query. 2016-06-09 17:18:16 -04:00
pg_prewarm Update pg_prewarm extension for parallel query. 2016-06-09 17:18:18 -04:00
pg_standby Fix new warnings from GCC 7 2017-05-16 08:52:39 -04:00
pg_stat_statements Fix typos in comments. 2017-02-06 11:34:15 +02:00
pg_trgm Further fix pg_trgm's extraction of trigrams from regular expressions. 2017-04-14 14:52:03 -04:00
pg_visibility Fix bugs in contrib/pg_visibility. 2016-10-01 16:32:55 -04:00
pgcrypto Fix typos in comments. 2017-02-06 11:34:15 +02:00
pgrowlocks Fix handling of multixacts predating pg_upgrade 2016-06-24 18:29:28 -04:00
pgstattuple Minor fixes in contrib installation scripts. 2016-06-14 10:47:06 -04:00
postgres_fdw Remove bogus line from comment. 2017-08-17 11:19:43 -04:00
seg Fix typos in comments. 2017-02-06 11:34:15 +02:00
sepgsql Silence compiler warning in sepgsql 2017-04-06 14:24:41 -07:00
spi Fix typos in comments. 2017-02-06 11:34:15 +02:00
sslinfo Support OpenSSL 1.1.0. 2016-09-15 12:55:38 +03:00
start-scripts Fix typos in comments. 2017-02-06 11:34:15 +02:00
tablefunc Widen query numbers-of-tuples-processed counters to uint64. 2016-03-12 16:05:29 -05:00
tcn Revert CREATE INDEX ... INCLUDING ... 2016-04-08 21:52:13 +03:00
test_decoding Fix crash when logical decoding is invoked from a PL function. 2017-10-06 19:18:58 -04:00
tsearch2 Fix typos in comments. 2017-02-06 11:34:15 +02:00
tsm_system_rows Update copyright for 2016 2016-01-02 13:33:40 -05:00
tsm_system_time Update copyright for 2016 2016-01-02 13:33:40 -05:00
unaccent Update unaccent extension for parallel query. 2016-06-14 14:55:49 -04:00
uuid-ossp Give a useful error message if uuid-ossp is built without preconfiguration. 2016-12-22 11:19:13 -05:00
vacuumlo Update copyright for 2016 2016-01-02 13:33:40 -05:00
xml2 Fix typos in comments. 2017-02-06 11:34:15 +02:00
contrib-global.mk Respect TEMP_CONFIG when pg_regress_check and friends are called 2016-02-27 12:28:21 -05:00
Makefile Bloom index contrib module 2016-04-01 16:42:24 +03: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.