postgresql/contrib
Amit Kapila 7f13ac8123 Fix catalog lookup with the wrong snapshot during logical decoding.
Previously, we relied on HEAP2_NEW_CID records and XACT_INVALIDATION
records to know if the transaction has modified the catalog, and that
information is not serialized to snapshot. Therefore, after the restart,
if the logical decoding decodes only the commit record of the transaction
that has actually modified a catalog, we will miss adding its XID to the
snapshot. Thus, we will end up looking at catalogs with the wrong
snapshot.

To fix this problem, this change adds the list of transaction IDs and
sub-transaction IDs, that have modified catalogs and are running during
snapshot serialization, to the serialized snapshot. After restart or
otherwise, when we restore from such a serialized snapshot, the
corresponding list is restored in memory. Now, when decoding a COMMIT
record, we check both the list and the ReorderBuffer to see if the
transaction has modified catalogs.

Since this adds additional information to the serialized snapshot, we
cannot backpatch it. For back branches, we took another approach.
We remember the last-running-xacts list of the decoded RUNNING_XACTS
record after restoring the previously serialized snapshot. Then, we mark
the transaction as containing catalog changes if it's in the list of
initial running transactions and its commit record has
XACT_XINFO_HAS_INVALS. This doesn't require any file format changes but
the transaction will end up being added to the snapshot even if it has
only relcache invalidations. But that won't be a problem since we use
snapshot built during decoding only to read system catalogs.

This commit bumps SNAPBUILD_VERSION because of a change in SnapBuild.

Reported-by: Mike Oh
Author: Masahiko Sawada
Reviewed-by: Amit Kapila, Shi yu, Takamichi Osumi, Kyotaro Horiguchi, Bertrand Drouvot, Ahsan Hadi
Backpatch-through: 10
Discussion: https://postgr.es/m/81D0D8B0-E7C4-4999-B616-1E5004DBDCD2%40amazon.com
2022-08-11 10:09:24 +05:30
..
adminpack Use has_privs_for_roles for predefined role checks 2022-03-28 15:10:04 -04:00
amcheck Replace many MemSet calls with struct initialization 2022-07-16 08:50:49 +02:00
auth_delay Remove now superfluous declarations of dlsym()ed symbols. 2022-07-17 17:29:32 -07:00
auto_explain Make new auto_explain test safe for log_error_verbosity = verbose. 2022-07-31 12:29:44 -04:00
basebackup_to_shell Move basebackup code to new directory src/backend/backup 2022-08-10 14:03:23 -04:00
basic_archive Tweak detail and hint messages to be consistent with project policy 2022-07-20 09:50:12 +09:00
bloom Remove now superfluous declarations of dlsym()ed symbols. 2022-07-17 17:29:32 -07:00
bool_plperl Fix broken ruleutils support for function TRANSFORM clauses. 2021-01-25 13:03:43 -05:00
btree_gin Fix failure of btree_gin indexscans with "char" type and </<= operators. 2021-08-10 18:10:29 -04:00
btree_gist Pre-beta mechanical code beautification. 2022-05-12 15:17:30 -04:00
citext CREATE INDEX: use the original userid for more ACL checks. 2022-06-25 09:07:41 -07:00
cube Indent C code in flex and bison files 2022-05-13 07:17:29 +02:00
dblink Remove redundant null pointer checks before PQclear and PQconninfoFree 2022-07-03 20:11:05 +02:00
dict_int Update copyright for 2022 2022-01-07 19:04:57 -05:00
dict_xsyn Update copyright for 2022 2022-01-07 19:04:57 -05:00
earthdistance Make contrib modules' installation scripts more secure. 2020-08-10 10:44:42 -04:00
file_fdw Add regression test for TRUNCATE on foreign table not supporting TRUNCATE. 2022-07-20 09:35:14 +09:00
fuzzystrmatch Update copyright for 2022 2022-01-07 19:04:57 -05:00
hstore Mark all symbols exported from extension libraries PGDLLEXPORT. 2022-07-17 18:50:14 -07:00
hstore_plperl Remove now superfluous declarations of dlsym()ed symbols. 2022-07-17 17:29:32 -07:00
hstore_plpython Remove now superfluous declarations of dlsym()ed symbols. 2022-07-17 17:29:32 -07:00
intagg Make contrib modules' installation scripts more secure. 2020-08-10 10:44:42 -04:00
intarray Change some unnecessary MemSet calls 2022-07-01 00:16:38 +02:00
isn Remove now superfluous declarations of dlsym()ed symbols. 2022-07-17 17:29:32 -07:00
jsonb_plperl Expose internal function for converting int64 to numeric 2020-09-09 20:16:28 +02:00
jsonb_plpython Remove now superfluous declarations of dlsym()ed symbols. 2022-07-17 17:29:32 -07:00
lo Fix bogus CALLED_AS_TRIGGER() defenses. 2020-04-03 11:24:56 -04:00
ltree Mark all symbols exported from extension libraries PGDLLEXPORT. 2022-07-17 18:50:14 -07:00
ltree_plpython Remove now superfluous declarations of dlsym()ed symbols. 2022-07-17 17:29:32 -07:00
oid2name Change internal RelFileNode references to RelFileNumber or RelFileLocator. 2022-07-06 11:39:09 -04:00
old_snapshot Update copyright for 2022 2022-01-07 19:04:57 -05:00
pageinspect Replace many MemSet calls with struct initialization 2022-07-16 08:50:49 +02:00
passwordcheck Remove now superfluous declarations of dlsym()ed symbols. 2022-07-17 17:29:32 -07:00
pg_buffercache Add regression test coverage for contrib/pg_buffercache. 2022-07-30 15:33:44 -04:00
pg_freespacemap Avoid instabilities with the regression tests of pg_freespacemap 2022-03-29 13:52:49 +09:00
pg_prewarm Add a regression test for contrib/pg_prewarm. 2022-08-01 17:59:44 -04:00
pg_stat_statements Remove dead pread and pwrite replacement code. 2022-08-05 09:49:21 +12:00
pg_surgery Remove xloginsert.h from xlog.h 2022-01-30 12:25:24 -03:00
pg_trgm Remove now superfluous declarations of dlsym()ed symbols. 2022-07-17 17:29:32 -07:00
pg_visibility Replace many MemSet calls with struct initialization 2022-07-16 08:50:49 +02:00
pg_walinspect Replace many MemSet calls with struct initialization 2022-07-16 08:50:49 +02:00
pgcrypto Tidy up claimed supported CPUs and OSes. 2022-07-11 11:50:41 +12:00
pgrowlocks Use has_privs_for_roles for predefined role checks 2022-03-28 15:10:04 -04:00
pgstattuple Replace many MemSet calls with struct initialization 2022-07-16 08:50:49 +02:00
postgres_fdw postgres_fdw: Disable batch insertion when there are WCO constraints. 2022-08-05 17:15:00 +09:00
seg Indent C code in flex and bison files 2022-05-13 07:17:29 +02:00
sepgsql Remove now superfluous declarations of dlsym()ed symbols. 2022-07-17 17:29:32 -07:00
spi Remove extraneous blank lines before block-closing braces 2022-04-13 19:16:02 +02:00
sslinfo contrib/sslinfo needs a fix too to make hamerkop happy. 2021-11-07 11:33:53 -05:00
start-scripts Remove contrib/start-scripts/osx/. 2017-11-17 12:53:20 -05:00
tablefunc Remove all traces of tuplestore_donestoring() in the C code 2022-02-17 09:52:02 +09:00
tcn Add a regression test for contrib/tcn. 2022-08-01 19:18:50 -04:00
test_decoding Fix catalog lookup with the wrong snapshot during logical decoding. 2022-08-11 10:09:24 +05:30
tsm_system_rows Update copyright for 2022 2022-01-07 19:04:57 -05:00
tsm_system_time Update copyright for 2022 2022-01-07 19:04:57 -05:00
unaccent Simplify a bit the special rules generating unaccent.rules 2022-07-05 16:17:51 +09:00
uuid-ossp Remove redundant null pointer checks before free() 2022-07-03 11:47:15 +02:00
vacuumlo Improve frontend error logging style. 2022-04-08 14:55:14 -04:00
xml2 Simplify SRFs using materialize mode in contrib/ modules 2022-03-08 10:12:22 +09:00
Makefile Add contrib/pg_walinspect. 2022-04-08 00:26:44 -07: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.