postgresql/contrib
Tom Lane 618c16707a Rearrange libpq's error reporting to avoid duplicated error text.
Since commit ffa2e4670, libpq accumulates text in conn->errorMessage
across a whole query cycle.  In some situations, we may report more
than one error event within a cycle: the easiest case to reach is
where we report a FATAL error message from the server, and then a
bit later we detect loss of connection.  Since, historically, each
error PGresult bears the entire content of conn->errorMessage,
this results in duplication of the FATAL message in any output that
concatenates the contents of the PGresults.

Accumulation in errorMessage still seems like a good idea, especially
in view of the number of places that did ad-hoc error concatenation
before ffa2e4670.  So to fix this, let's track how much of
conn->errorMessage has been read out into error PGresults, and only
include new text in later PGresults.  The tricky part of that is
to be sure that we never discard an error PGresult once made (else
we'd risk dropping some text, a problem much worse than duplication).
While libpq formerly did that in some code paths, a little bit of
rearrangement lets us postpone making an error PGresult at all until
we are about to return it.

A side benefit of that postponement is that it now becomes practical
to return a dummy static PGresult in cases where we hit out-of-memory
while trying to manufacture an error PGresult.  This eliminates the
admittedly-very-rare case where we'd return NULL from PQgetResult,
indicating successful query completion, even though what actually
happened was an OOM failure.

Discussion: https://postgr.es/m/ab4288f8-be5c-57fb-2400-e3e857f53e46@enterprisedb.com
2022-02-18 15:35:21 -05:00
..
adminpack Simplify coding around path_contains_parent_reference(). 2022-01-31 13:53:38 -05:00
amcheck Replace Test::More plans with done_testing 2022-02-11 20:54:44 +01:00
auth_delay Update copyright for 2022 2022-01-07 19:04:57 -05:00
auto_explain Replace Test::More plans with done_testing 2022-02-11 20:54:44 +01:00
basic_archive In basic_archive tests, insist on wal_level='replica'. 2022-02-03 16:40:32 -05:00
bloom Replace Test::More plans with done_testing 2022-02-11 20:54:44 +01: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 Fix results of index-only scans on btree_gist char(N) indexes. 2022-01-08 14:54:39 -05:00
citext Enable routine running of citext's UTF8-specific test cases. 2022-01-05 13:30:07 -05:00
cube Add binary I/O capability for cube datatype. 2021-03-06 12:04:05 -05:00
dblink Remove all traces of tuplestore_donestoring() in the C code 2022-02-17 09:52:02 +09: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
file_fdw Add HEADER support to COPY text format 2022-01-28 09:44:47 +01:00
fuzzystrmatch Update copyright for 2022 2022-01-07 19:04:57 -05:00
hstore Update copyright for 2022 2022-01-07 19:04:57 -05:00
hstore_plperl
hstore_plpython Fix broken ruleutils support for function TRANSFORM clauses. 2021-01-25 13:03:43 -05:00
intagg
intarray Update copyright for 2022 2022-01-07 19:04:57 -05:00
isn Update copyright for 2022 2022-01-07 19:04:57 -05:00
jsonb_plperl
jsonb_plpython
lo
ltree Clean up more code using "(expr) ? true : false" 2021-10-11 09:36:42 +09:00
ltree_plpython
oid2name Replace Test::More plans with done_testing 2022-02-11 20:54:44 +01:00
old_snapshot Update copyright for 2022 2022-01-07 19:04:57 -05:00
pageinspect Remove all traces of tuplestore_donestoring() in the C code 2022-02-17 09:52:02 +09:00
passwordcheck Improve error handling of cryptohash computations 2022-01-11 09:55:16 +09:00
pg_buffercache
pg_freespacemap
pg_prewarm Split xlog.c into xlog.c and xlogrecovery.c. 2022-02-16 09:30:38 +02:00
pg_stat_statements Remove all traces of tuplestore_donestoring() in the C code 2022-02-17 09:52:02 +09:00
pg_surgery Remove xloginsert.h from xlog.h 2022-01-30 12:25:24 -03:00
pg_trgm Update copyright for 2022 2022-01-07 19:04:57 -05:00
pg_visibility Remove xloginsert.h from xlog.h 2022-01-30 12:25:24 -03:00
pgcrypto pgcrypto: Remove explicit hex encoding/decoding from tests 2021-12-08 06:06:22 +01:00
pgrowlocks pgrowlocks: Fix incorrect format placeholders 2021-12-08 09:32:16 +01:00
pgstattuple Update copyright for 2022 2022-01-07 19:04:57 -05:00
postgres_fdw postgres_fdw: Make postgres_fdw.application_name support more escape sequences. 2022-02-18 11:38:12 +09:00
seg Update copyright for 2022 2022-01-07 19:04:57 -05:00
sepgsql Include permissive/enforcing state in sepgsql log messages. 2022-01-12 14:23:13 -05:00
spi
sslinfo contrib/sslinfo needs a fix too to make hamerkop happy. 2021-11-07 11:33:53 -05:00
start-scripts
tablefunc Remove all traces of tuplestore_donestoring() in the C code 2022-02-17 09:52:02 +09:00
tcn Update copyright for 2022 2022-01-07 19:04:57 -05:00
test_decoding Rearrange libpq's error reporting to avoid duplicated error text. 2022-02-18 15:35:21 -05:00
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 Update copyright for 2022 2022-01-07 19:04:57 -05:00
uuid-ossp Improve error handling of cryptohash computations 2022-01-11 09:55:16 +09:00
vacuumlo Replace Test::More plans with done_testing 2022-02-11 20:54:44 +01:00
xml2 Remove all traces of tuplestore_donestoring() in the C code 2022-02-17 09:52:02 +09:00
contrib-global.mk
Makefile Allow archiving via loadable modules. 2022-02-03 14:05:02 -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.