postgresql/contrib
Tom Lane c67c2e2a29 Be more wary about 32-bit integer overflow in pg_stat_statements.
We've heard a couple of reports of people having trouble with
multi-gigabyte-sized query-texts files.  It occurred to me that on
32-bit platforms, there could be an issue with integer overflow
of calculations associated with the total query text size.
Address that with several changes:

1. Limit pg_stat_statements.max to INT_MAX / 2 not INT_MAX.
The hashtable code will bound it to that anyway unless "long"
is 64 bits.  We still need overflow guards on its use, but
this helps.

2. Add a check to prevent extending the query-texts file to
more than MaxAllocHugeSize.  If it got that big, qtext_load_file
would certainly fail, so there's not much point in allowing it.
Without this, we'd need to consider whether extent, query_offset,
and related variables shouldn't be off_t not size_t.

3. Adjust the comparisons in need_gc_qtexts() to be done in 64-bit
arithmetic on all platforms.  It appears possible that under duress
those multiplications could overflow 32 bits, yielding a false
conclusion that we need to garbage-collect the texts file, which
could lead to repeatedly garbage-collecting after every hash table
insertion.

Per report from Bruno da Silva.  I'm not convinced that these
issues fully explain his problem; there may be some other bug that's
contributing to the query-texts file becoming so large in the first
place.  But it did get that big, so #2 is a reasonable defense,
and #3 could explain the reported performance difficulties.

(See also commit 8bbe4cbd9, which addressed some related bugs.
The second Discussion: link is the thread that led up to that.)

This issue is old, and is primarily a problem for old platforms,
so back-patch.

Discussion: https://postgr.es/m/CAB+Nuk93fL1Q9eLOCotvLP07g7RAv4vbdrkm0cVQohDVMpAb9A@mail.gmail.com
Discussion: https://postgr.es/m/5601D354.5000703@BlueTreble.com
2022-08-02 18:05:38 -04:00
..
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 Deal with paths containing \ and spaces in basebackup_to_shell tests 2022-07-18 10:32:15 -07: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 Be more wary about 32-bit integer overflow in pg_stat_statements. 2022-08-02 18:05:38 -04: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 Improve performance of ORDER BY / DISTINCT aggregates 2022-08-02 23:11:45 +12: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 Allow users to skip logical replication of data having origin. 2022-07-21 08:47:38 +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.