postgresql/contrib
Amit Kapila 7259736a6e Implement streaming mode in ReorderBuffer.
Instead of serializing the transaction to disk after reaching the
logical_decoding_work_mem limit in memory, we consume the changes we have
in memory and invoke stream API methods added by commit 45fdc9738b.
However, sometimes if we have incomplete toast or speculative insert we
spill to the disk because we can't generate the complete tuple and stream.
And, as soon as we get the complete tuple we stream the transaction
including the serialized changes.

We can do this incremental processing thanks to having assignments
(associating subxact with toplevel xacts) in WAL right away, and
thanks to logging the invalidation messages at each command end. These
features are added by commits 0bead9af48 and c55040ccd0 respectively.

Now that we can stream in-progress transactions, the concurrent aborts
may cause failures when the output plugin consults catalogs (both system
and user-defined).

We handle such failures by returning ERRCODE_TRANSACTION_ROLLBACK
sqlerrcode from system table scan APIs to the backend or WALSender
decoding a specific uncommitted transaction. The decoding logic on the
receipt of such a sqlerrcode aborts the decoding of the current
transaction and continue with the decoding of other transactions.

We have ReorderBufferTXN pointer in each ReorderBufferChange by which we
know which xact it belongs to.  The output plugin can use this to decide
which changes to discard in case of stream_abort_cb (e.g. when a subxact
gets discarded).

We also provide a new option via SQL APIs to fetch the changes being
streamed.

Author: Dilip Kumar, Tomas Vondra, Amit Kapila, Nikhil Sontakke
Reviewed-by: Amit Kapila, Kuntal Ghosh, Ajin Cherian
Tested-by: Neha Sharma, Mahendra Singh Thalor and Ajin Cherian
Discussion: https://postgr.es/m/688b0b7f-2f6c-d827-c27b-216a8e3ea700@2ndquadrant.com
2020-08-08 07:47:06 +05:30
..
adminpack Read until EOF vice stat-reported size in read_binary_file 2020-07-04 06:26:53 -04:00
amcheck Remove obsolete amcheck comment. 2020-08-06 16:23:52 -07:00
auth_delay Update copyrights for 2020 2020-01-01 12:21:45 -05:00
auto_explain Add the option to report WAL usage in EXPLAIN and auto_explain. 2020-04-06 08:02:15 +05:30
bloom Invent "amadjustmembers" AM method for validating opclass members. 2020-08-01 17:12:47 -04:00
bool_plperl Create contrib/bool_plperl to provide a bool transform for PL/Perl[U]. 2020-03-06 17:11:23 -05:00
btree_gin Remove support for upgrading extensions from "unpackaged" state. 2020-02-19 16:59:14 -05:00
btree_gist Update btree_gist extension for parallel query 2020-07-20 13:59:50 +03:00
citext Add current substring regular expression syntax 2020-06-29 11:05:00 +02:00
cube Remove support for upgrading extensions from "unpackaged" state. 2020-02-19 16:59:14 -05:00
dblink Initialize dblink remoteConn struct in all cases 2020-05-28 13:44:54 -04:00
dict_int Preserve integer and float values accurately in (de)serialize_deflist. 2020-03-10 12:30:02 -04:00
dict_xsyn Remove support for upgrading extensions from "unpackaged" state. 2020-02-19 16:59:14 -05:00
earthdistance Remove support for upgrading extensions from "unpackaged" state. 2020-02-19 16:59:14 -05:00
file_fdw Remove utils/acl.h from catalog/objectaddress.h 2020-03-10 10:27:00 +01:00
fuzzystrmatch Remove support for upgrading extensions from "unpackaged" state. 2020-02-19 16:59:14 -05:00
hstore Avoid using %c printf format for potentially non-ASCII characters. 2020-06-29 11:41:19 -04:00
hstore_plperl Mark some contrib modules as "trusted". 2020-02-13 15:02:35 -05:00
hstore_plpython Split all OBJS style lines in makefiles into one-line-per-entry style. 2019-11-05 14:41:07 -08:00
intagg Remove support for upgrading extensions from "unpackaged" state. 2020-02-19 16:59:14 -05:00
intarray Initial pgindent and pgperltidy run for v13. 2020-05-14 13:06:50 -04:00
isn Remove support for upgrading extensions from "unpackaged" state. 2020-02-19 16:59:14 -05:00
jsonb_plperl Support infinity and -infinity in the numeric data type. 2020-07-22 19:19:44 -04:00
jsonb_plpython Support infinity and -infinity in the numeric data type. 2020-07-22 19:19:44 -04:00
lo Fix bogus CALLED_AS_TRIGGER() defenses. 2020-04-03 11:24:56 -04:00
ltree Use query collation, not column's collation, while examining statistics. 2020-06-05 16:18:50 -04:00
ltree_plpython Improve error messages in ltree_in and lquery_in. 2020-03-31 11:14:42 -04:00
oid2name Add PostgreSQL home page to --help output 2020-02-28 13:12:21 +01:00
pageinspect Avoid using %c printf format for potentially non-ASCII characters. 2020-06-29 11:41:19 -04:00
passwordcheck Update copyrights for 2020 2020-01-01 12:21:45 -05:00
pg_buffercache Remove support for upgrading extensions from "unpackaged" state. 2020-02-19 16:59:14 -05:00
pg_freespacemap Remove support for upgrading extensions from "unpackaged" state. 2020-02-19 16:59:14 -05:00
pg_prewarm code: replace 'master' with 'leader' where appropriate. 2020-07-08 12:58:32 -07:00
pg_standby pg_standby: Don't use HAVE_WORKING_LINK 2020-03-03 08:54:44 +01:00
pg_stat_statements pg_stat_statements: track number of rows processed by some utility commands. 2020-07-29 23:21:55 +09:00
pg_trgm Spelling adjustments 2020-06-09 10:41:41 +02:00
pg_visibility Cache smgrnblocks() results in recovery. 2020-07-31 14:29:52 +12:00
pgcrypto Fix corner case with 16kB-long decompression in pgcrypto, take 2 2020-07-27 15:58:32 +09:00
pgrowlocks Avoid holding a directory FD open across assorted SRF calls. 2020-03-16 21:05:52 -04:00
pgstattuple pgstattuple: Have pgstattuple_approx accept TOAST tables 2020-06-30 00:56:43 +02:00
postgres_fdw Revert "Use CP_SMALL_TLIST for hash aggregate" 2020-07-12 22:59:32 -07:00
seg Use perl warnings pragma consistently 2020-04-13 11:55:45 -04:00
sepgsql Fix compilation failure with sepgsql 2020-07-15 09:42:21 +09:00
spi Remove support for upgrading extensions from "unpackaged" state. 2020-02-19 16:59:14 -05:00
sslinfo Remove support for upgrading extensions from "unpackaged" state. 2020-02-19 16:59:14 -05:00
start-scripts Remove contrib/start-scripts/osx/. 2017-11-17 12:53:20 -05:00
tablefunc Remove support for upgrading extensions from "unpackaged" state. 2020-02-19 16:59:14 -05:00
tcn Mark some contrib modules as "trusted". 2020-02-13 15:02:35 -05:00
test_decoding Implement streaming mode in ReorderBuffer. 2020-08-08 07:47:06 +05:30
tsm_system_rows Mark some contrib modules as "trusted". 2020-02-13 15:02:35 -05:00
tsm_system_time Mark some contrib modules as "trusted". 2020-02-13 15:02:35 -05:00
unaccent Update Unicode data to Unicode 13.0.0 and CLDR 37 2020-04-24 09:52:59 +02:00
uuid-ossp Remove support for upgrading extensions from "unpackaged" state. 2020-02-19 16:59:14 -05:00
vacuumlo Add PostgreSQL home page to --help output 2020-02-28 13:12:21 +01:00
xml2 Remove support for upgrading extensions from "unpackaged" state. 2020-02-19 16:59:14 -05:00
contrib-global.mk Respect TEMP_CONFIG when pg_regress_check and friends are called 2016-02-27 12:28:21 -05:00
Makefile Create contrib/bool_plperl to provide a bool transform for PL/Perl[U]. 2020-03-06 17:11:23 -05: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.