PostgreSQL 14.10 commit log

Stamp 14.10.

commit   : 33d5cf65f8c97d6bf085dffecb51c6a52d1f3f0d    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 6 Nov 2023 17:08:43 -0500    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 6 Nov 2023 17:08:43 -0500    

Click here for diff

M configure
M configure.ac

Last-minute updates for release notes.

commit   : ef2950f5700220b9f8a5647c2a9711fc9b1716aa    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 6 Nov 2023 13:26:33 -0500    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 6 Nov 2023 13:26:33 -0500    

Click here for diff

Security: CVE-2023-5868, CVE-2023-5869, CVE-2023-5870  

M doc/src/sgml/release-14.sgml

Detect integer overflow while computing new array dimensions.

commit   : edc0a8d82a369be2ae6c7e3bea4ae96cff5723f8    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 6 Nov 2023 10:56:43 -0500    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 6 Nov 2023 10:56:43 -0500    

Click here for diff

array_set_element() and related functions allow an array to be  
enlarged by assigning to subscripts outside the current array bounds.  
While these places were careful to check that the new bounds are  
allowable, they neglected to consider the risk of integer overflow  
in computing the new bounds.  In edge cases, we could compute new  
bounds that are invalid but get past the subsequent checks,  
allowing bad things to happen.  Memory stomps that are potentially  
exploitable for arbitrary code execution are possible, and so is  
disclosure of server memory.  
  
To fix, perform the hazardous computations using overflow-detecting  
arithmetic routines, which fortunately exist in all still-supported  
branches.  
  
The test cases added for this generate (after patching) errors that  
mention the value of MaxArraySize, which is platform-dependent.  
Rather than introduce multiple expected-files, use psql's VERBOSITY  
parameter to suppress the printing of the message text.  v11 psql  
lacks that parameter, so omit the tests in that branch.  
  
Our thanks to Pedro Gallegos for reporting this problem.  
  
Security: CVE-2023-5869  

M src/backend/utils/adt/arrayfuncs.c
M src/backend/utils/adt/arrayutils.c
M src/include/utils/array.h
M src/test/regress/expected/arrays.out
M src/test/regress/sql/arrays.sql

Compute aggregate argument types correctly in transformAggregateCall().

commit   : 9146d0d65073eeb6738db7c21626d8672fda29f9    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 6 Nov 2023 10:38:00 -0500    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 6 Nov 2023 10:38:00 -0500    

Click here for diff

transformAggregateCall() captures the datatypes of the aggregate's  
arguments immediately to construct the Aggref.aggargtypes list.  
This seems reasonable because the arguments have already been  
transformed --- but there is an edge case where they haven't been.  
Specifically, if we have an unknown-type literal in an ANY argument  
position, nothing will have been done with it earlier.  But if we  
also have DISTINCT, then addTargetToGroupList() converts the literal  
to "text" type, resulting in the aggargtypes list not matching the  
actual runtime type of the argument.  The end result is that the  
aggregate tries to interpret a "text" value as being of type  
"unknown", that is a zero-terminated C string.  If the text value  
contains no zero bytes, this could result in disclosure of server  
memory following the text literal value.  
  
To fix, move the collection of the aggargtypes list to the end  
of transformAggregateCall(), after DISTINCT has been handled.  
This requires slightly more code, but not a great deal.  
  
Our thanks to Jingzhou Fu for reporting this problem.  
  
Security: CVE-2023-5868  

M src/backend/parser/parse_agg.c
M src/test/regress/expected/jsonb.out
M src/test/regress/sql/jsonb.sql

Set GUC "is_superuser" in all processes that set AuthenticatedUserId.

commit   : ecd5d240c5965b5127e1c2fdf93c9fc61f2d1acd    
  
author   : Noah Misch <[email protected]>    
date     : Mon, 6 Nov 2023 06:14:13 -0800    
  
committer: Noah Misch <[email protected]>    
date     : Mon, 6 Nov 2023 06:14:13 -0800    

Click here for diff

It was always false in single-user mode, in autovacuum workers, and in  
background workers.  This had no specifically-identified security  
consequences, but non-core code or future work might make it  
security-relevant.  Back-patch to v11 (all supported versions).  
  
Jelte Fennema-Nio.  Reported by Jelte Fennema-Nio.  

M src/backend/utils/init/miscinit.c

Ban role pg_signal_backend from more superuser backend types.

commit   : 508acb901e31cf10fcac0ff9304d3d2d33bb2b2f    
  
author   : Noah Misch <[email protected]>    
date     : Mon, 6 Nov 2023 06:14:13 -0800    
  
committer: Noah Misch <[email protected]>    
date     : Mon, 6 Nov 2023 06:14:13 -0800    

Click here for diff

Documentation says it cannot signal "a backend owned by a superuser".  
On the contrary, it could signal background workers, including the  
logical replication launcher.  It could signal autovacuum workers and  
the autovacuum launcher.  Block all that.  Signaling autovacuum workers  
and those two launchers doesn't stall progress beyond what one could  
achieve other ways.  If a cluster uses a non-core extension with a  
background worker that does not auto-restart, this could create a denial  
of service with respect to that background worker.  A background worker  
with bugs in its code for responding to terminations or cancellations  
could experience those bugs at a time the pg_signal_backend member  
chooses.  Back-patch to v11 (all supported versions).  
  
Reviewed by Jelte Fennema-Nio.  Reported by Hemanth Sandrana and  
Mahendrakar Srinivasarao.  
  
Security: CVE-2023-5870  

M src/backend/storage/ipc/signalfuncs.c
M src/test/regress/expected/privileges.out
M src/test/regress/sql/privileges.sql

Translation updates

commit   : b5e4e6d21ab9d8dffee77fadd7a07861a5abf77a    
  
author   : Peter Eisentraut <[email protected]>    
date     : Mon, 6 Nov 2023 13:19:51 +0100    
  
committer: Peter Eisentraut <[email protected]>    
date     : Mon, 6 Nov 2023 13:19:51 +0100    

Click here for diff

Source-Git-URL: https://git.postgresql.org/git/pgtranslation/messages.git  
Source-Git-Hash: 367d7493dba6944ccb2dcbf64a118224d8c7a81c  

M src/backend/po/de.po
M src/backend/po/es.po
M src/backend/po/fr.po
M src/backend/po/ja.po
M src/backend/po/ru.po
M src/backend/po/sv.po
M src/backend/po/uk.po
M src/bin/initdb/po/es.po
M src/bin/initdb/po/ru.po
M src/bin/pg_basebackup/po/ru.po
M src/bin/pg_config/po/ru.po
M src/bin/pg_controldata/po/fr.po
M src/bin/pg_controldata/po/ru.po
M src/bin/pg_ctl/po/fr.po
M src/bin/pg_ctl/po/ru.po
M src/bin/pg_dump/po/ru.po
M src/bin/pg_dump/po/sv.po
M src/bin/pg_resetwal/po/fr.po
M src/bin/pg_resetwal/po/ru.po
M src/bin/pg_rewind/po/ru.po
M src/bin/pg_upgrade/po/de.po
M src/bin/pg_upgrade/po/fr.po
M src/bin/pg_upgrade/po/ja.po
M src/bin/pg_upgrade/po/ru.po
M src/bin/pg_verifybackup/po/ru.po
M src/bin/pg_waldump/po/ru.po
M src/bin/pg_waldump/po/sv.po
M src/bin/psql/po/es.po
M src/bin/psql/po/fr.po
M src/bin/psql/po/it.po
M src/bin/psql/po/ru.po
M src/bin/psql/po/zh_CN.po
M src/bin/scripts/po/de.po
M src/bin/scripts/po/fr.po
M src/bin/scripts/po/ja.po
M src/bin/scripts/po/ru.po
M src/interfaces/libpq/po/ru.po
M src/interfaces/libpq/po/zh_CN.po
M src/pl/plpython/po/ru.po
M src/pl/plpython/po/sv.po
M src/pl/plpython/po/uk.po
M src/pl/tcl/po/fr.po

Release notes for 16.1, 15.5, 14.10, 13.13, 12.17, 11.22.

commit   : 4fada7def9ee386bd6c89266b4c9be53aa332b84    
  
author   : Tom Lane <[email protected]>    
date     : Sun, 5 Nov 2023 13:14:07 -0500    
  
committer: Tom Lane <[email protected]>    
date     : Sun, 5 Nov 2023 13:14:07 -0500    

Click here for diff

M doc/src/sgml/release-14.sgml

doc: \copy can get data values \. and end-of-input confused

commit   : d1d80ef0115d5c7a079136403528a485c3c48586    
  
author   : Bruce Momjian <[email protected]>    
date     : Fri, 3 Nov 2023 13:57:59 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Fri, 3 Nov 2023 13:57:59 -0400    

Click here for diff

Reported-by: Svante Richter  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 11  

M doc/src/sgml/ref/psql-ref.sgml
M src/bin/psql/copy.c

doc: CREATE DATABASE doesn't copy db-level perms. from template

commit   : e29f8e7535f4bb68e30de8066e6aba460d0f072c    
  
author   : Bruce Momjian <[email protected]>    
date     : Fri, 3 Nov 2023 13:39:50 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Fri, 3 Nov 2023 13:39:50 -0400    

Click here for diff

Reported-by: [email protected]  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 11  

M doc/src/sgml/manage-ag.sgml

pg_upgrade: Add missing newline to message

commit   : f9280e77ecf4eaa17999f6c656b9008ced4cfa19    
  
author   : Peter Eisentraut <[email protected]>    
date     : Fri, 3 Nov 2023 11:50:25 -0400    
  
committer: Peter Eisentraut <[email protected]>    
date     : Fri, 3 Nov 2023 11:50:25 -0400    

Click here for diff

This was the backport of 2e3dc8c148, but in older releases the newline  
must be in the message.  

M src/bin/pg_upgrade/check.c

Doc: update CREATE RULE ref page's hoary discussion of views.

commit   : f53f83b33e4203ec181c93b7fa5a2e9c70e73c31    
  
author   : Tom Lane <[email protected]>    
date     : Fri, 3 Nov 2023 11:48:23 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Fri, 3 Nov 2023 11:48:23 -0400    

Click here for diff

This text left one with the impression that an ON SELECT rule could  
be attached to a plain table, which has not been true since commit  
264c06820 (meaning the text was already misleading when written,  
evidently by me in 96bd67f61).  However, it didn't get really bad  
until b23cd185f removed the convert-a-table-to-a-view logic, which  
had made it possible for scripts that thought they were attaching  
ON SELECTs to tables to still work.  
  
Rewrite into a form that makes it clear that an ON SELECT rule  
is better regarded as an implementation detail of a view.  
Pre-v16, point out that adding ON SELECT to a table actually  
converts it to a view.  
  
Per bug #18178 from Joshua Uyehara.  Back-patch to all supported  
branches.  
  
Discussion: https://postgr.es/m/[email protected]  

M doc/src/sgml/ref/create_rule.sgml

doc: ALTER DEFAULT PRIVILEGES does not affect inherited roles

commit   : 36c32af79e8034bf6da9c2d70ec427eb3b8a7556    
  
author   : Bruce Momjian <[email protected]>    
date     : Fri, 3 Nov 2023 09:51:53 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Fri, 3 Nov 2023 09:51:53 -0400    

Click here for diff

Reported-by: Jordi GutiƩrrez Hermoso  
  
Discussion: https://postgr.es/m/[email protected]  
  
Co-authored-by: Laurenz Albe  
  
Backpatch-through: 11  

M doc/src/sgml/ref/alter_default_privileges.sgml

Be more wary about NULL values for GUC string variables.

commit   : 47c0f00cf90f58402c4fa9d9d605ca2fe8132687    
  
author   : Tom Lane <[email protected]>    
date     : Thu, 2 Nov 2023 11:47:33 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Thu, 2 Nov 2023 11:47:33 -0400    

Click here for diff

get_explain_guc_options() crashed if a string GUC marked GUC_EXPLAIN  
has a NULL boot_val.  Nosing around found a couple of other places  
that seemed insufficiently cautious about NULL string values, although  
those are likely unreachable in practice.  Add some commentary  
defining the expectations for NULL values of string variables,  
in hopes of forestalling future additions of more such bugs.  
  
Xing Guo, Aleksander Alekseev, Tom Lane  
  
Discussion: https://postgr.es/m/CACpMh+AyDx5YUpPaAgzVwC1d8zfOL4JoD-uyFDnNSa1z0EsDQQ@mail.gmail.com  

M src/backend/utils/misc/guc.c
M src/include/utils/guc_tables.h

doc: Replace reference to ERRCODE_RAISE_EXCEPTION by "raise_exception"

commit   : 52a105eff2ba2e8154e5a25ae69603ef421b8804    
  
author   : Michael Paquier <[email protected]>    
date     : Thu, 2 Nov 2023 07:33:02 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Thu, 2 Nov 2023 07:33:02 +0900    

Click here for diff

This part of the documentation refers to exceptions as handled by  
PL/pgSQL, and using the internal error code is confusing.  
  
Per thinko in 66bde49d96a9.  
  
Reported-by: Euler Taveira, Bruce Momjian  
Discussion: https://postgr.es/m/[email protected]  
Backpatch-through: 11  

M doc/src/sgml/plpgsql.sgml

doc: improve ALTER SYSTEM description of value list quoting

commit   : b3dd43db1a3b54957bff4efb30dd9ab8715a2c2b    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 31 Oct 2023 10:21:32 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 31 Oct 2023 10:21:32 -0400    

Click here for diff

Reported-by: [email protected]  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 11  

M doc/src/sgml/ref/alter_system.sgml

doc: add function argument and query parameter limits

commit   : 9333f0d9370beb6b2246966729de516555290d99    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 31 Oct 2023 09:23:09 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 31 Oct 2023 09:23:09 -0400    

Click here for diff

Also reorder entries and add commas.  
  
Reported-by: David G. Johnston  
  
Discussion: https://postgr.es/m/CAKFQuwYeNPxeocV3_0+Zx=_Xwvg+sNyEMdzyG5s2E2e0hZLQhg@mail.gmail.com  
  
Author: David G. Johnston (partial)  
  
Backpatch-through: 12  

M doc/src/sgml/limits.sgml

doc: 1-byte varlena headers can be used for user PLAIN storage

commit   : 57354242c079301e575d688a1cb221f408bd4f38    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 31 Oct 2023 09:10:35 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 31 Oct 2023 09:10:35 -0400    

Click here for diff

This also updates some C comments.  
  
Reported-by: [email protected]  
  
Discussion: https://postgr.es/m/167336599095.2667301.15497893107226841625@wrigleys.postgresql.org  
  
Author: Laurenz Albe (doc patch)  
  
Backpatch-through: 11  

M doc/src/sgml/storage.sgml
M src/backend/access/common/heaptuple.c
M src/backend/utils/adt/rangetypes.c

Adjust the order of the prechecks in pgrowlocks()

commit   : c5988e69fe90248e0b9179f2f950ce40928ee009    
  
author   : David Rowley <[email protected]>    
date     : Tue, 31 Oct 2023 16:43:28 +1300    
  
committer: David Rowley <[email protected]>    
date     : Tue, 31 Oct 2023 16:43:28 +1300    

Click here for diff

4b8266415 added a precheck to pgrowlocks() to ensure the given object's  
pg_class.relam is HEAP_TABLE_AM_OID, however, that check was put before  
another check which was checking if the given object was a partitioned  
table.  Since the pg_class.relam is always InvalidOid for partitioned  
tables, if pgrowlocks() was called passing a partitioned table, then the  
"only heap AM is supported" error would be raised instead of the intended  
error about the given object being a partitioned table.  
  
Here we simply move the pg_class.relam check to after the check that  
verifies that we are in fact working with a normal (non-partitioned)  
table.  
  
Reported-by: jian he  
Discussion: https://postgr.es/m/CACJufxFaSp_WguFCf0X98951zFVX+dXFnF1mxAb-G3g1HiHOow@mail.gmail.com  
Backpatch-through: 12, where 4b8266415 was introduced.  

M contrib/pgrowlocks/pgrowlocks.c

Diagnose !indisvalid in more SQL functions.

commit   : 0a7b183fdc1bbd221acf88b03ee4b4cfd23e0abe    
  
author   : Noah Misch <[email protected]>    
date     : Mon, 30 Oct 2023 14:46:05 -0700    
  
committer: Noah Misch <[email protected]>    
date     : Mon, 30 Oct 2023 14:46:05 -0700    

Click here for diff

pgstatindex failed with ERRCODE_DATA_CORRUPTED, of the "can't-happen"  
class XX.  The other functions succeeded on an empty index; they might  
have malfunctioned if the failed index build left torn I/O or other  
complex state.  Report an ERROR in statistics functions pgstatindex,  
pgstatginindex, pgstathashindex, and pgstattuple.  Report DEBUG1 and  
skip all index I/O in maintenance functions brin_desummarize_range,  
brin_summarize_new_values, brin_summarize_range, and  
gin_clean_pending_list.  Back-patch to v11 (all supported versions).  
  
Discussion: https://postgr.es/m/[email protected]  

M contrib/pgstattuple/pgstatindex.c
M contrib/pgstattuple/pgstattuple.c
M src/backend/access/brin/brin.c
M src/backend/access/gin/ginfast.c

amcheck: Distinguish interrupted page deletion from corruption.

commit   : 42496cba60bc086f3fdba4b3d20426e27100fbfb    
  
author   : Noah Misch <[email protected]>    
date     : Mon, 30 Oct 2023 14:46:05 -0700    
  
committer: Noah Misch <[email protected]>    
date     : Mon, 30 Oct 2023 14:46:05 -0700    

Click here for diff

This prevents false-positive reports about "the first child of leftmost  
target page is not leftmost of its level", "block %u is not leftmost"  
and "left link/right link pair".  They appeared if amcheck ran before  
VACUUM cleaned things, after a cluster exited recovery between the  
first-stage and second-stage WAL records of a deletion.  Back-patch to  
v11 (all supported versions).  
  
Reviewed by Peter Geoghegan.  
  
Discussion: https://postgr.es/m/[email protected]  

A contrib/amcheck/t/005_pitr.pl
M contrib/amcheck/verify_nbtree.c

btree_gin: Fix calculation of leftmost interval value.

commit   : 162b38a0683960c115954694cd7be56dec5bfe33    
  
author   : Dean Rasheed <[email protected]>    
date     : Sun, 29 Oct 2023 11:14:34 +0000    
  
committer: Dean Rasheed <[email protected]>    
date     : Sun, 29 Oct 2023 11:14:34 +0000    

Click here for diff

Formerly, the value computed by leftmostvalue_interval() was a long  
way short of the minimum possible interval value.  As a result, an  
index scan on a GIN index on an interval column with < or <= operators  
would miss large negative interval values.  
  
Fix by setting all fields of the leftmost interval to their minimum  
values, ensuring that the result is less than any other possible  
interval.  Since this only affects index searches, no index rebuild is  
necessary.  
  
Back-patch to all supported branches.  
  
Dean Rasheed, reviewed by Heikki Linnakangas.  
  
Discussion: https://postgr.es/m/CAEZATCV80%2BgOfF8ehNUUfaKBZgZMDfCfL-g1HhWGb6kC3rpDfw%40mail.gmail.com  

M contrib/btree_gin/btree_gin.c
M contrib/btree_gin/expected/interval.out
M contrib/btree_gin/sql/interval.sql

Fix intra-query memory leak when a SRF returns zero rows.

commit   : 5d7515d7d1168a66a34aed7b9f2c9f4e2660e863    
  
author   : Tom Lane <[email protected]>    
date     : Sat, 28 Oct 2023 14:04:43 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Sat, 28 Oct 2023 14:04:43 -0400    

Click here for diff

When looping around after finding that the set-returning function  
returned zero rows for the current input tuple, ExecProjectSet  
neglected to reset either of the two memory contexts it's  
responsible for cleaning out.  Typically this wouldn't cause much  
problem, because once the SRF does return at least one row, the  
contexts would get reset on the next call.  However, if the SRF  
returns no rows for many input tuples in succession, quite a lot  
of memory could be transiently consumed.  
  
To fix, make sure we reset both contexts while looping around.  
  
Per bug #18172 from Sergei Kornilov.  Back-patch to all supported  
branches.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/executor/nodeProjectSet.c

Remove PHOT from our default timezone abbreviations list.

commit   : 877e7b4b9c9938967ee48df17ac6d09462da4214    
  
author   : Tom Lane <[email protected]>    
date     : Sat, 28 Oct 2023 11:54:40 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Sat, 28 Oct 2023 11:54:40 -0400    

Click here for diff

Debian recently decided to split out a bunch of "obsolete" timezone  
names into a new tzdata-legacy package, which isn't installed by  
default.  One of these zone names is Pacific/Enderbury, and that  
breaks our regression tests (on --with-system-tzdata builds)  
because our default timezone abbreviations list defines PHOT as  
Pacific/Enderbury.  
  
Pacific/Enderbury got renamed to Pacific/Kanton in tzdata 2021b,  
so that in distros that still have this entry it's just a symlink  
to Pacific/Kanton anyway.  So one answer would be to redefine PHOT  
as Pacific/Kanton.  However, then things would fail if the  
installed tzdata predates 2021b, which is recent enough that that  
seems like a real problem.  
  
Instead, let's just remove PHOT from the default list.  That seems  
likely to affect nobody in the real world, because (a) it was an  
abbreviation that the tzdb crew made up in the first place, with  
no evidence of real-world usage, and (b) the total human population  
of the Phoenix Islands is less than two dozen persons, per Wikipedia.  
If anyone does use this zone abbreviation they can easily put it back  
via a custom abbreviations file.  
  
We'll keep PHOT in the Pacific.txt reference file, but change it  
to Pacific/Kanton there, as that definition seems more likely to  
be useful to future readers of that file.  
  
Per report from Victor Wagner.  Back-patch to all supported  
branches.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/timezone/tznames/Default
M src/timezone/tznames/Pacific.txt

Fix minmax-multi distance for extreme interval values

commit   : 0fa73c5cd05093236cd6d5ff56e0bd5693d2645f    
  
author   : Tomas Vondra <[email protected]>    
date     : Fri, 27 Oct 2023 17:57:44 +0200    
  
committer: Tomas Vondra <[email protected]>    
date     : Fri, 27 Oct 2023 17:57:44 +0200    

Click here for diff

When calculating distance for interval values, the code mostly mimicked  
interval_mi, i.e. it built a new interval value for the difference.  
That however does not work for sufficiently distant interval values,  
when the difference overflows the interval range.  
  
Instead, we can calculate the distance directly, without constructing  
the intermediate (and unnecessary) interval value.  
  
Backpatch to 14, where minmax-multi indexes were introduced.  
  
Reported-by: Dean Rasheed  
Reviewed-by: Ashutosh Bapat, Dean Rasheed  
Backpatch-through: 14  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/access/brin/brin_minmax_multi.c
M src/test/regress/expected/brin_multi.out
M src/test/regress/sql/brin_multi.sql

Fix minmax-multi on infinite date/timestamp values

commit   : 52c934cc1f2ee947a76dfc395403b07c24bb6712    
  
author   : Tomas Vondra <[email protected]>    
date     : Fri, 27 Oct 2023 17:57:28 +0200    
  
committer: Tomas Vondra <[email protected]>    
date     : Fri, 27 Oct 2023 17:57:28 +0200    

Click here for diff

Make sure that infinite values in date/timestamp columns are treated as  
if in infinite distance. Infinite values should not be merged with other  
values, leaving them as outliers. The code however returned distance 0  
in this case, so that infinite values were merged first. While this does  
not break the index (i.e. it still produces correct query results), it  
may make it much less efficient.  
  
We don't need explicit handling of infinite date/timestamp values when  
calculating distances, because those values are represented as extreme  
but regular values (e.g. INT64_MIN/MAX for the timestamp type).  
  
We don't need an exact distance, just a value that is much larger than  
distanced between regular values. With the added cast to double values,  
we can simply subtract the values.  
  
The regression test queries a value in the "gap" and checks the range  
was properly eliminated by the BRIN index.  
  
This only affects minmax-multi indexes on timestamp/date columns with  
infinite values, which is not very common in practice. The affected  
indexes may need to be rebuilt.  
  
Backpatch to 14, where minmax-multi indexes were introduced.  
  
Reported-by: Ashutosh Bapat  
Reviewed-by: Ashutosh Bapat, Dean Rasheed  
Backpatch-through: 14  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/access/brin/brin_minmax_multi.c
M src/test/regress/expected/brin_multi.out
M src/test/regress/sql/brin_multi.sql

Fix calculation in brin_minmax_multi_distance_date

commit   : d1740e169d950d457907bbfa32f39f79c8504e20    
  
author   : Tomas Vondra <[email protected]>    
date     : Fri, 27 Oct 2023 17:57:11 +0200    
  
committer: Tomas Vondra <[email protected]>    
date     : Fri, 27 Oct 2023 17:57:11 +0200    

Click here for diff

When calculating the distance between date values, make sure to subtract  
them in the right order, i.e. (larger - smaller).  
  
The distance is used to determine which values to merge, and is expected  
to be a positive value. The code unfortunately did the subtraction in  
the opposite order, i.e. (smaller - larger), thus producing negative  
values and merging values the most distant values first.  
  
The resulting index is correct (i.e. produces correct results), but may  
be significantly less efficient. This affects all minmax-multi indexes  
on date columns.  
  
Backpatch to 14, where minmax-multi indexes were introduced.  
  
Reported-by: Ashutosh Bapat  
Reviewed-by: Ashutosh Bapat, Dean Rasheed  
Backpatch-through: 14  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/access/brin/brin_minmax_multi.c
M src/test/regress/expected/brin_multi.out
M src/test/regress/sql/brin_multi.sql

Fix overflow when calculating timestamp distance in BRIN

commit   : 90c4da6d4392dc45de4182cd433cd91026e39222    
  
author   : Tomas Vondra <[email protected]>    
date     : Fri, 27 Oct 2023 17:56:27 +0200    
  
committer: Tomas Vondra <[email protected]>    
date     : Fri, 27 Oct 2023 17:56:27 +0200    

Click here for diff

When calculating distances for timestamp values for BRIN minmax-multi  
indexes, we need to be careful about overflows for extreme values. If  
the value overflows into a negative value, the index may be inefficient.  
  
The new regression test checks this for the timestamp type by adding a  
table with enough values to force range compaction/merging. The values  
are close to min/max, which means a risk of overflow.  
  
Fixed by converting the int64 values to double first, before calculating  
the distance. This prevents the overflow. We may lose some precision, of  
course, but that's good enough. In the worst case we build a slightly  
less efficient index, but for large distances this won't matter.  
  
This only affects minmax-multi indexes on timestamp columns, with ranges  
containing values sufficiently distant to cause an overflow. That seems  
like a fairly rare case in practice.  
  
Backpatch to 14, where minmax-multi indexes were introduced.  
  
Reported-by: Ashutosh Bapat  
Reviewed-by: Ashutosh Bapat, Dean Rasheed  
Backpatch-through: 14  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/access/brin/brin_minmax_multi.c
M src/test/regress/expected/brin_multi.out
M src/test/regress/sql/brin_multi.sql

Doc: remove misleading info about ecpg's CONNECT/DISCONNECT DEFAULT.

commit   : 70b59a27285751d3d829630a54fc2396e1da6bb6    
  
author   : Tom Lane <[email protected]>    
date     : Wed, 25 Oct 2023 17:34:47 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Wed, 25 Oct 2023 17:34:47 -0400    

Click here for diff

As far as I can see, ecpg has no notion of a "default" open  
connection.  You can do "CONNECT TO DEFAULT" but that just specifies  
letting libpq use all its default connection parameters --- the  
resulting connection is not special subsequently.  In particular,  
SET CONNECTION = DEFAULT and DISCONNECT DEFAULT simply act on a  
connection named DEFAULT, if you've made one; they do not have  
special lookup rules.  But the documentation of these commands  
makes it look like they do.  
  
Simplest fix, I think, is just to remove the paras suggesting that  
DEFAULT is special here.  
  
Also, SET CONNECTION *does* have one special lookup rule, which  
is that it recognizes CURRENT as an alias for the currently selected  
connection.  SET CONNECTION = CURRENT is a no-op, so it's pretty  
useless, but nonetheless it does something different from selecting  
a connection by name; so we'd better document it.  
  
Per report from Sylvain Frandaz.  Back-patch to all supported  
versions.  
  
Discussion: https://postgr.es/m/[email protected]  

M doc/src/sgml/ecpg.sgml

doc: Fix some typos and grammar

commit   : 5a4c21e952e20cdfd3c6dab16604efac8db78cd8    
  
author   : Michael Paquier <[email protected]>    
date     : Wed, 25 Oct 2023 09:41:13 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Wed, 25 Oct 2023 09:41:13 +0900    

Click here for diff

Author: Ekaterina Kiryanova, Elena Indrupskaya, Oleg Sibiryakov, Maxim  
Yablokov  
Discussion: https://postgr.es/m/[email protected]  
Backpatch-through: 11  

M doc/src/sgml/ref/create_foreign_table.sgml

Fix problems when a plain-inheritance parent table is excluded.

commit   : 8f4a6b9e4f5b6959575ec4fb86cc0f5d5a608f06    
  
author   : Tom Lane <[email protected]>    
date     : Tue, 24 Oct 2023 14:48:28 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Tue, 24 Oct 2023 14:48:28 -0400    

Click here for diff

When an UPDATE/DELETE/MERGE's target table is an old-style  
inheritance tree, it's possible for the parent to get excluded  
from the plan while some children are not.  (I believe this is  
only possible if we can prove that a CHECK ... NO INHERIT  
constraint on the parent contradicts the query WHERE clause,  
so it's a very unusual case.)  In such a case, ExecInitModifyTable  
mistakenly concluded that the first surviving child is the target  
table, leading to at least two bugs:  
  
1. The wrong table's statement-level triggers would get fired.  
  
2. In v16 and up, it was possible to fail with "invalid perminfoindex  
0 in RTE with relid nnnn" due to the child RTE not having permissions  
data included in the query plan.  This was hard to reproduce reliably  
because it did not occur unless the update triggered some non-HOT  
index updates.  
  
In v14 and up, this is easy to fix by defining ModifyTable.rootRelation  
to be the parent RTE in plain inheritance as well as partitioned cases.  
  
While the wrong-triggers bug also appears in older branches, the  
relevant code in both the planner and executor is quite a bit  
different, so it would take a good deal of effort to develop and  
test a suitable patch.  Given the lack of field complaints about the  
trigger issue, I'll desist for now.  (Patching v11 for this seems  
unwise anyway, given that it will have no more releases after next  
month.)  
  
Per bug #18147 from Hans Buschmann.  
  
Amit Langote and Tom Lane  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/executor/nodeModifyTable.c
M src/backend/optimizer/plan/planner.c
M src/backend/optimizer/util/pathnode.c
M src/include/nodes/pathnodes.h
M src/include/nodes/plannodes.h
M src/test/regress/expected/inherit.out
M src/test/regress/sql/inherit.sql

Doc: indexUnchanged is strictly a hint.

commit   : df73ca35144a8711e42b82cd147ee34407553b3c    
  
author   : Peter Geoghegan <[email protected]>    
date     : Tue, 24 Oct 2023 09:27:21 -0700    
  
committer: Peter Geoghegan <[email protected]>    
date     : Tue, 24 Oct 2023 09:27:21 -0700    

Click here for diff

Clearly spell out the limitations of aminsert()'s indexUnchanged hinting  
mechanism in the index AM documentation.  
  
Oversight in commit 9dc718bd, which added the "logically unchanged  
index" hint (which is used to trigger bottom-up index deletion).  
  
Author: Peter Geoghegan <[email protected]>  
Reported-By: Tom Lane <[email protected]>  
Reviewed-By: Tom Lane <[email protected]>  
Discussion: https://postgr.es/m/CAH2-WzmU_BQ=-H9L+bxTSMQBqHMjp1DSwGypvL0gKs+dTOfkKg@mail.gmail.com  
Backpatch: 14-, where indexUnchanged hinting was introduced.  

M doc/src/sgml/indexam.sgml

Log LLVM library version in configure output.

commit   : 03e749c2b89e880e0a226458e9446fca4440696f    
  
author   : Thomas Munro <[email protected]>    
date     : Sun, 22 Oct 2023 14:17:00 +1300    
  
committer: Thomas Munro <[email protected]>    
date     : Sun, 22 Oct 2023 14:17:00 +1300    

Click here for diff

When scanning build farm results, it's useful to be able to see which  
version is in use.  For the Meson build system, this information was  
already displayed.  
  
Back-patch to all supported branches.  
  
Discussion: https://postgr.es/m/4022690.1697852728%40sss.pgh.pa.us  

M config/llvm.m4
M configure

Fix min_dynamic_shared_memory on Windows.

commit   : fb9a16a1a6f24f5bbf05ca7a49bd4305575cc2f2    
  
author   : Thomas Munro <[email protected]>    
date     : Sun, 22 Oct 2023 10:04:55 +1300    
  
committer: Thomas Munro <[email protected]>    
date     : Sun, 22 Oct 2023 10:04:55 +1300    

Click here for diff

When min_dynamic_shared_memory is set above 0, we try to find space in a  
pre-allocated region of the main shared memory area instead of calling  
dsm_impl_XXX() routines to allocate more.  The dsm_pin_segment() and  
dsm_unpin_segment() routines had a bug: they called dsm_impl_XXX()  
routines even for main region segments.  Nobody noticed before now  
because those routines do nothing on Unix, but on Windows they'd fail  
while attempting to duplicate an invalid Windows HANDLE.  Add the  
missing gating.  
  
Back-patch to 14, where commit 84b1c63a added this feature.  Fixes  
pgsql-bugs bug #18165.  
  
Reported-by: Maxime Boyer <[email protected]>  
Tested-by: Alexander Lakhin <[email protected]>  
Discussion: https://postgr.es/m/18165-bf4f525cea6e51de%40postgresql.org  

M src/backend/storage/ipc/dsm.c

Dodge a compiler bug affecting timetz_zone/timetz_izone.

commit   : 85c9dda818878149f3d248d5e09e03c4f26f436c    
  
author   : Tom Lane <[email protected]>    
date     : Fri, 20 Oct 2023 13:40:15 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Fri, 20 Oct 2023 13:40:15 -0400    

Click here for diff

This avoids a compiler bug occurring in AIX's xlc, even in pretty  
late-model revisions.  Buildfarm testing has now confirmed that  
only 64-bit xlc is affected.  Although we are contemplating  
dropping support for xlc in v17, it's still supported in the  
back branches, so we need this fix.  
  
Back-patch of code changes from HEAD commit 19fa97731.  
(The test cases were already back-patched, in 4a427b82c et al.)  
  
Discussion: https://postgr.es/m/CA+hUKGK=DOC+hE-62FKfZy=Ybt5uLkrg3zCZD-jFykM-iPn8yw@mail.gmail.com  

M src/backend/utils/adt/date.c

Doc: update CREATE OPERATOR's statement about => as an operator.

commit   : 9208c6f04328612661281696b4d626b118547a10    
  
author   : Tom Lane <[email protected]>    
date     : Fri, 20 Oct 2023 13:01:02 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Fri, 20 Oct 2023 13:01:02 -0400    

Click here for diff

This doco said that use of => as an operator "is deprecated".  
It's been fully disallowed since 865f14a2d back in 9.5, but  
evidently that commit missed updating this statement.  
Do so now.  

M doc/src/sgml/ref/create_operator.sgml

Improve pglz_decompress's defenses against corrupt compressed data.

commit   : 2c63dc0356b3573382821bb67c869e95646b6f6d    
  
author   : Tom Lane <[email protected]>    
date     : Wed, 18 Oct 2023 20:43:17 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Wed, 18 Oct 2023 20:43:17 -0400    

Click here for diff

When processing a match tag, check to see if the claimed "off"  
is more than the distance back to the output buffer start.  
If it is, then the data is corrupt, and what's more we would  
fetch from outside the buffer boundaries and potentially incur  
a SIGSEGV.  (Although the odds of that seem relatively low, given  
that "off" can't be more than 4K.)  
  
Back-patch to v13; before that, this function wasn't really  
trying to protect against bad data.  
  
Report and fix by Flavien Guedez.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/common/pg_lzcompress.c

jit: Changes for LLVM 17.

commit   : 0a8b7d5c11266ba5291d0aafc0ff4f92ab1cc041    
  
author   : Thomas Munro <[email protected]>    
date     : Wed, 18 Oct 2023 22:15:54 +1300    
  
committer: Thomas Munro <[email protected]>    
date     : Wed, 18 Oct 2023 22:15:54 +1300    

Click here for diff

Changes required by https://llvm.org/docs/NewPassManager.html.  
  
Back-patch to 12, leaving the final release of 11 unchanged, consistent  
with earlier decision not to back-patch LLVM 16 support either.  
  
Author: Dmitry Dolgov <[email protected]>  
Reviewed-by: Andres Freund <[email protected]>  
Reviewed-by: Thomas Munro <[email protected]>  
Discussion: https://postgr.es/m/CA%2BhUKG%2BWXznXCyTgCADd%3DHWkP9Qksa6chd7L%3DGCnZo-MBgg9Lg%40mail.gmail.com  

M src/backend/jit/llvm/llvmjit.c
M src/backend/jit/llvm/llvmjit_wrap.cpp

jit: Supply LLVMGlobalGetValueType() for LLVM < 8.

commit   : ee3e4c41f35449c3cffc05a4b7738940075d9c28    
  
author   : Thomas Munro <[email protected]>    
date     : Thu, 19 Oct 2023 03:01:55 +1300    
  
committer: Thomas Munro <[email protected]>    
date     : Thu, 19 Oct 2023 03:01:55 +1300    

Click here for diff

Commit 37d5babb used this C API function while adding support for LLVM  
16 and opaque pointers, but it's not available in LLVM 7 and older.  
Provide it in our own llvmjit_wrap.cpp.  It just calls a C++ function  
that pre-dates LLVM 3.9, our minimum target.  
  
Back-patch to 12, like 37d5babb.  
  
Discussion: https://postgr.es/m/CA%2BhUKGKnLnJnWrkr%3D4mSGhE5FuTK55FY15uULR7%3Dzzc%3DwX4Nqw%40mail.gmail.com  

M src/backend/jit/llvm/llvmjit_wrap.cpp
M src/include/jit/llvmjit.h

jit: Support opaque pointers in LLVM 16.

commit   : 82d9a782a29633a7d2c8c0785e4162a46f93d23b    
  
author   : Thomas Munro <[email protected]>    
date     : Wed, 18 Oct 2023 22:09:05 +1300    
  
committer: Thomas Munro <[email protected]>    
date     : Wed, 18 Oct 2023 22:09:05 +1300    

Click here for diff

Remove use of LLVMGetElementType() and provide the type of all pointers  
to LLVMBuildXXX() functions when emitting IR, as required by modern LLVM  
versions[1].  
  
 * For LLVM <= 14, we'll still use the old LLVMBuildXXX() functions.  
 * For LLVM == 15, we'll continue to do the same, explicitly opting  
   out of opaque pointer mode.  
 * For LLVM >= 16, we'll use the new LLVMBuildXXX2() functions that take  
   the extra type argument.  
  
The difference is hidden behind some new IR emitting wrapper functions  
l_load(), l_gep(), l_call() etc.  The change is mostly mechanical,  
except that at each site the correct type had to be provided.  
  
In some places we needed to do some extra work to get functions types,  
including some new wrappers for C++ APIs that are not yet exposed by in  
LLVM's C API, and some new "example" functions in llvmjit_types.c  
because it's no longer possible to start from the function pointer type  
and ask for the function type.  
  
Back-patch to 12, because it's a little tricker in 11 and we agreed not  
to put the latest LLVM support into the upcoming final release of 11.  
  
[1] https://llvm.org/docs/OpaquePointers.html  
  
Reviewed-by: Dmitry Dolgov <[email protected]>  
Reviewed-by: Ronan Dunklau <[email protected]>  
Reviewed-by: Andres Freund <[email protected]>  
Discussion: https://postgr.es/m/CA%2BhUKGKNX_%3Df%2B1C4r06WETKTq0G4Z_7q4L4Fxn5WWpMycDj9Fw%40mail.gmail.com  

M src/backend/jit/llvm/llvmjit.c
M src/backend/jit/llvm/llvmjit_deform.c
M src/backend/jit/llvm/llvmjit_expr.c
M src/backend/jit/llvm/llvmjit_types.c
M src/backend/jit/llvm/llvmjit_wrap.cpp
M src/include/jit/llvmjit.h
M src/include/jit/llvmjit_emit.h

windows: msvc: Define STDIN/OUT/ERR_FILENO.

commit   : 555bc89c9060803d9812ad41765971d8b8a67363    
  
author   : Nathan Bossart <[email protected]>    
date     : Tue, 17 Oct 2023 16:11:03 -0500    
  
committer: Nathan Bossart <[email protected]>    
date     : Tue, 17 Oct 2023 16:11:03 -0500    

Click here for diff

This commit (c290e79cf0) was originally back-patched to v15.  
Commit 97550c0711 added a new use of STDERR_FILENO, and it was  
back-patched all the way to v11, thus breaking MSVC builds for v11  
through v14.  Since STDERR_FILENO is now needed on older versions,  
let's back-patch c290e79cf0 down to v11, too.  
  
Here follows the original commit message describing the change:  
  
Because they are not available we've used _fileno(stdin) in some places, but  
that doesn't reliably work, because stdin might be closed. This is the  
prerequisite of the subsequent commit, fixing a failure introduced in  
76e38b37a5.  
  
Author: Andres Freund <[email protected]>  
Reported-By: Sandeep Thakkar <[email protected]>  
Message-Id: [email protected] (on pgsql-packagers)  
Discussion: https://postgr.es/m/20231017164517.GA613565%40nathanxps13  
Backpatch-through: 11  

M src/include/port/win32_msvc/unistd.h

Back-patch test cases for timetz_zone/timetz_izone.

commit   : dc159b95d921e12e82820301413945eff1ca88b0    
  
author   : Tom Lane <[email protected]>    
date     : Tue, 17 Oct 2023 13:55:45 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Tue, 17 Oct 2023 13:55:45 -0400    

Click here for diff

Per code coverage reports, we had zero regression test coverage  
of these functions.  That came back to bite us, as apparently  
that's allowed us to miss discovering misbehavior of this code  
with AIX's xlc compiler.  Install relevant portions of the  
test cases added in 97957fdba, 2f0472030, 19fa97731.  
  
(Assuming the expected outcome that the xlc problem does appear  
in back branches, a code fix will follow.)  
  
Discussion: https://postgr.es/m/CA+hUKGK=DOC+hE-62FKfZy=Ybt5uLkrg3zCZD-jFykM-iPn8yw@mail.gmail.com  

M src/test/regress/expected/timetz.out
M src/test/regress/sql/timetz.sql

Avoid calling proc_exit() in processes forked by system().

commit   : 54fc9dca5b10e82cb85c7cd44ebe1eb0f28f795b    
  
author   : Nathan Bossart <[email protected]>    
date     : Tue, 17 Oct 2023 10:42:12 -0500    
  
committer: Nathan Bossart <[email protected]>    
date     : Tue, 17 Oct 2023 10:42:12 -0500    

Click here for diff

The SIGTERM handler for the startup process immediately calls  
proc_exit() for the duration of the restore_command, i.e., a call  
to system().  This system() call forks a new process to execute the  
shell command, and this child process inherits the parent's signal  
handlers.  If both the parent and child processes receive SIGTERM,  
both will attempt to call proc_exit().  This can end badly.  For  
example, both processes will try to remove themselves from the  
PGPROC shared array.  
  
To fix this problem, this commit adds a check in  
StartupProcShutdownHandler() to see whether MyProcPid == getpid().  
If they match, this is the parent process, and we can proc_exit()  
like before.  If they do not match, this is a child process, and we  
just emit a message to STDERR (in a signal safe manner) and  
_exit(), thereby skipping any problematic exit callbacks.  
  
This commit also adds checks in proc_exit(), ProcKill(), and  
AuxiliaryProcKill() that verify they are not being called within  
such child processes.  
  
Suggested-by: Andres Freund  
Reviewed-by: Thomas Munro, Andres Freund  
Discussion: https://postgr.es/m/Y9nGDSgIm83FHcad%40paquier.xyz  
Discussion: https://postgr.es/m/20230223231503.GA743455%40nathanxps13  
Backpatch-through: 11  

M src/backend/postmaster/startup.c
M src/backend/storage/ipc/ipc.c
M src/backend/storage/lmgr/proc.c
M src/backend/utils/error/elog.c
M src/include/utils/elog.h

Ensure we have a snapshot while dropping ON COMMIT DROP temp tables.

commit   : f6e1ee3cfa3eb6fbda0e798e103dbad7760f17f5    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 16 Oct 2023 14:06:11 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 16 Oct 2023 14:06:11 -0400    

Click here for diff

Dropping a temp table could entail TOAST table access to clean out  
toasted catalog entries, such as large pg_constraint.conbin strings  
for complex CHECK constraints.  If we did that via ON COMMIT DROP,  
we triggered the assertion in init_toast_snapshot(), because  
there was no provision for setting up a snapshot for the drop  
actions.  Fix that.  
  
(I assume here that the adjacent truncation actions for ON COMMIT  
DELETE ROWS don't have a similar problem: it doesn't seem like  
nontransactional truncations would need to touch any toasted fields.  
If that proves wrong, we could refactor a bit to have the same  
snapshot acquisition cover that too.)  
  
The test case added here does not fail before v15, because that  
assertion was added in 277692220 which was not back-patched.  
However, the race condition the assertion warns of surely  
exists further back, so back-patch to all supported branches.  
  
Per report from Richard Guo.  
  
Discussion: https://postgr.es/m/CAMbWs4-x26=_QxxgdJyNbiCDzvtr2WV5ZDso_v-CukKEe6cBZw@mail.gmail.com  

M src/backend/commands/tablecmds.c
M src/test/regress/expected/temp.out
M src/test/regress/sql/temp.sql

Update the documentation on recovering from (M)XID exhaustion.

commit   : 81b3df0f1b89531bce57b8e8168e790e6c1cf6ec    
  
author   : Robert Haas <[email protected]>    
date     : Mon, 16 Oct 2023 12:57:39 -0400    
  
committer: Robert Haas <[email protected]>    
date     : Mon, 16 Oct 2023 12:57:39 -0400    

Click here for diff

The old documentation encourages entering single-user mode for no  
reason, which is a bad plan in most cases. Instead, discourage users  
from doing that, and explain the limited cases in which it may be  
desirable.  
  
The old documentation claims that running VACUUM as anyone but the  
superuser can't possibly work, which is not really true, because it  
might be that some other user has enough permissions to VACUUM all  
the tables that matter. Weaken the language just a bit.  
  
The old documentation claims that you can't run any commands  
when near XID exhaustion, which is false because you can still  
run commands that don't require an XID, like a SELECT without a  
locking clause.  
  
The old documentation doesn't clearly explain that it's a good idea  
to get rid of prepared transactons, long-running transactions, and  
replication slots that are preventing (M)XID horizon advancement.  
Spell out the steps to do that.  
  
Also, discourage the use of VACUUM FULL and VACUUM FREEZE in  
this type of scenario.  
  
Back-patch to v14. Much of this is good advice on all supported  
versions, but before 60f1f09ff44308667ef6c72fbafd68235e55ae27  
the chances of VACUUM failing in multi-user mode were much higher.  
  
Alexander Alekseev, John Naylor, Robert Haas, reviewed at various  
times by Peter Geoghegan, Hannu Krosing, and Andres Freund.  
  
Discussion: http://postgr.es/m/CA+TgmoYtsUDrzaHcmjFhLzTk1VEv29mO_u-MT+XWHrBJ_4nD8A@mail.gmail.com  

M doc/src/sgml/maintenance.sgml

Try to handle torn reads of pg_control in frontend.

commit   : dc75748a918e3ba0fccf0aeb090068e1f172b3e9    
  
author   : Thomas Munro <[email protected]>    
date     : Mon, 16 Oct 2023 17:10:13 +1300    
  
committer: Thomas Munro <[email protected]>    
date     : Mon, 16 Oct 2023 17:10:13 +1300    

Click here for diff

Some of our src/bin tools read the control file without any kind of  
interlocking against concurrent writes from the server.  At least ext4  
and ntfs can expose partially modified contents when you do that.  
  
For now, we'll try to tolerate this by retrying up to 10 times if the  
checksum doesn't match, until we get two reads in a row with the same  
bad checksum.  This is not guaranteed to reach the right conclusion, but  
it seems very likely to.  Thanks to Tom Lane for this suggestion.  
  
Various ideas for interlocking or atomicity were considered too  
complicated, unportable or expensive given the lack of field reports,  
but remain open for future reconsideration.  
  
Back-patch as far as 12.  It doesn't seem like a good idea to put a  
heuristic change for a very rare problem into the final release of 11.  
  
Reviewed-by: Anton A. Melnikov <[email protected]>  
Reviewed-by: David Steele <[email protected]>  
Reviewed-by: Michael Paquier <[email protected]>  
Discussion: https://postgr.es/m/20221123014224.xisi44byq3cf5psi%40awork3.anarazel.de  

M src/common/controldata_utils.c

Acquire ControlFileLock in relevant SQL functions.

commit   : a56fe5cf07fea61f8d79570633298951697a3f72    
  
author   : Thomas Munro <[email protected]>    
date     : Mon, 16 Oct 2023 10:43:47 +1300    
  
committer: Thomas Munro <[email protected]>    
date     : Mon, 16 Oct 2023 10:43:47 +1300    

Click here for diff

Commit dc7d70ea added functions that read the control file, but didn't  
acquire ControlFileLock.  With unlucky timing, file systems that have  
weak interlocking like ext4 and ntfs could expose partially overwritten  
contents, and the checksum would fail.  
  
Back-patch to all supported releases.  
  
Reviewed-by: David Steele <[email protected]>  
Reviewed-by: Anton A. Melnikov <[email protected]>  
Reviewed-by: Michael Paquier <[email protected]>  
Discussion: https://postgr.es/m/20221123014224.xisi44byq3cf5psi%40awork3.anarazel.de  

M src/backend/utils/misc/pg_controldata.c

Dissociate btequalimage() from interval_ops, ending its deduplication.

commit   : 0834df90942d229ecc8bc36bfe5fe5f3ce26a4c9    
  
author   : Noah Misch <[email protected]>    
date     : Sat, 14 Oct 2023 16:33:51 -0700    
  
committer: Noah Misch <[email protected]>    
date     : Sat, 14 Oct 2023 16:33:51 -0700    

Click here for diff

Under interval_ops, some equal values are distinguishable.  One such  
pair is '24:00:00' and '1 day'.  With that being so, btequalimage()  
breaches the documented contract for the "equalimage" btree support  
function.  This can cause incorrect results from index-only scans.  
Users should REINDEX any btree indexes having interval-type columns.  
After updating, pg_amcheck will report an error for almost all such  
indexes.  This fix makes interval_ops simply omit the support function,  
like numeric_ops does.  Back-pack to v13, where btequalimage() first  
appeared.  In back branches, for the benefit of old catalog content,  
btequalimage() code will return false for type "interval".  Going  
forward, back-branch initdb will include the catalog change.  
  
Reviewed by Peter Geoghegan.  
  
Discussion: https://postgr.es/m/[email protected]  

M contrib/amcheck/verify_nbtree.c
M src/backend/utils/adt/datum.c
M src/include/catalog/pg_amproc.dat
M src/include/catalog/pg_opfamily.dat
M src/test/regress/expected/opr_sanity.out

Don't spuriously report FD_SETSIZE exhaustion on Windows.

commit   : 0df88a68643bf36f30c69060073356e2a5388457    
  
author   : Noah Misch <[email protected]>    
date     : Sat, 14 Oct 2023 15:54:46 -0700    
  
committer: Noah Misch <[email protected]>    
date     : Sat, 14 Oct 2023 15:54:46 -0700    

Click here for diff

Starting on 2023-08-03, this intermittently terminated a "pgbench -C"  
test in CI.  It could affect a high-client-count "pgbench" without "-C".  
While parallel reindexdb and vacuumdb reach the same problematic check,  
sufficient client count and/or connection turnover is less plausible for  
them.  Given the lack of examples from the buildfarm or from manual  
builds, reproducing this must entail rare operating system  
configurations.  Also correct the associated error message, which was  
wrong for non-Windows.  Back-patch to v12, where the pgbench check first  
appeared.  While v11 vacuumdb has the problematic check, reaching it  
with typical vacuumdb usage is implausible.  
  
Reviewed by Thomas Munro.  
  
Discussion: https://postgr.es/m/CA+hUKG+JwvTNdcyJTriy9BbtzF1veSRQ=9M_ZKFn9_LqE7Kp7Q@mail.gmail.com  

M src/bin/pgbench/pgbench.c
M src/fe_utils/parallel_slot.c

Fix runtime partition pruning for HASH partitioned tables

commit   : d26f33c3243669e95498039b2ffd92b296cfdcb2    
  
author   : David Rowley <[email protected]>    
date     : Fri, 13 Oct 2023 01:13:59 +1300    
  
committer: David Rowley <[email protected]>    
date     : Fri, 13 Oct 2023 01:13:59 +1300    

Click here for diff

This could only affect HASH partitioned tables with at least 2 partition  
key columns.  
  
If partition pruning was delayed until execution and the query contained  
an IS NULL qual on one of the partitioned keys, and some subsequent  
partitioned key was being compared to a non-Const, then this could result  
in a crash due to the incorrect keyno being used to calculate the  
stateidx for the expression evaluation code.  
  
Here we fix this by properly skipping partitioned keys which have a  
nullkey set.  Effectively, this must be the same as what's going on  
inside perform_pruning_base_step().  
  
Sergei Glukhov also provided a patch, but that's not what's being used  
here.  
  
Reported-by: Sergei Glukhov  
Reviewed-by: tender wang, Sergei Glukhov  
Discussion: https://postgr.es/m/[email protected]  
Backpatch-through: 11, where runtime partition pruning was added.  

M src/backend/executor/execPartition.c
M src/test/regress/expected/partition_prune.out
M src/test/regress/sql/partition_prune.sql

Doc: fix grammatical errors for enable_partitionwise_aggregate

commit   : 952e0b26c305126c8698af9f3fb3fa6d8ac07bf1    
  
author   : David Rowley <[email protected]>    
date     : Thu, 12 Oct 2023 21:16:43 +1300    
  
committer: David Rowley <[email protected]>    
date     : Thu, 12 Oct 2023 21:16:43 +1300    

Click here for diff

Author: Andrew Atkinson  
Reviewed-by: Ashutosh Bapat  
Discussion: https://postgr.es/m/CAG6XLEnC%3DEgq0YHRic2kWWDs4xwQnQ_kBA6qhhzAq1-pO_9Tfw%40mail.gmail.com  
Backpatch-through: 11, where enable_partitionwise_aggregate was added  

M doc/src/sgml/config.sgml

Fix incorrect step generation in HASH partition pruning

commit   : cd15bff4814bbc785116f2cffe840b527f7d6cb9    
  
author   : David Rowley <[email protected]>    
date     : Thu, 12 Oct 2023 19:52:31 +1300    
  
committer: David Rowley <[email protected]>    
date     : Thu, 12 Oct 2023 19:52:31 +1300    

Click here for diff

get_steps_using_prefix_recurse() incorrectly assumed that it could stop  
recursive processing of the 'prefix' list when cur_keyno was one before  
the step_lastkeyno.  Since hash partition pruning can prune using IS  
NULL quals, and these IS NULL quals are not present in the 'prefix'  
list, then that logic could cause more levels of recursion than what is  
needed and lead to there being no more items in the 'prefix' list to  
process.  This would manifest itself as a crash in some code that  
expected the 'start' ListCell not to be NULL.  
  
Here we adjust the logic so that instead of stopping recursion at 1 key  
before the step_lastkeyno, we just look at the llast(prefix) item and  
ensure we only recursively process up until just before whichever the last  
key is.  This effectively allows keys to be missing in the 'prefix' list.  
  
This change does mean that step_lastkeyno is no longer needed, so we  
remove that from the static functions.  I also spent quite some time  
reading this code and testing it to try to convince myself that there  
are no other issues.  That resulted in the irresistible temptation of  
rewriting some comments, many of which were just not true or inconcise.  
  
Reported-by: Sergei Glukhov  
Reviewed-by: Sergei Glukhov, tender wang  
Discussion: https://postgr.es/m/[email protected]  
Backpatch-through: 11, where partition pruning was introduced.  

M src/backend/partitioning/partprune.c
M src/test/regress/expected/partition_prune.out
M src/test/regress/sql/partition_prune.sql

doc: clarify that SSPI and GSSAPI are interchangeable

commit   : 40049edfeb15f7bbce1c9d2dd9c98575ba0cb759    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 10 Oct 2023 16:51:08 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 10 Oct 2023 16:51:08 -0400    

Click here for diff

Reported-by: [email protected]  
  
Discussion: https://postgr.es/m/167846222574.1803490.15815104179136215862@wrigleys.postgresql.org  
  
Backpatch-through: 11  

M doc/src/sgml/client-auth.sgml

doc: foreign servers with pushdown need matching collation

commit   : f8c1662fbbf27ed5bd0f5ac122af8dfcca794221    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 10 Oct 2023 16:04:56 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 10 Oct 2023 16:04:56 -0400    

Click here for diff

Reported-by: Pete Storer  
  
Discussion: https://postgr.es/m/BL0PR05MB66283C57D72E321591AE4EB1F3CE9@BL0PR05MB6628.namprd05.prod.outlook.com  
  
Backpatch-through: 11  

M doc/src/sgml/ref/create_server.sgml

doc: add SSL configuration section reference

commit   : af29fb571ecf005f2d33b9a613e0290d772cef45    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 10 Oct 2023 15:54:28 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 10 Oct 2023 15:54:28 -0400    

Click here for diff

Reported-by: Steve Atkins  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 11  

M doc/src/sgml/client-auth.sgml

doc: document the need to analyze partitioned tables

commit   : 4d966cc163f2cd1645eabdb95905320605b65f4e    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 10 Oct 2023 15:14:18 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 10 Oct 2023 15:14:18 -0400    

Click here for diff

Autovacuum does not do it.  
  
Reported-by: Justin Pryzby  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 11  

M doc/src/sgml/maintenance.sgml

Fix bug in GenericXLogFinish().

commit   : 6615bb95af2dece3142c1895bac1044e456de377    
  
author   : Jeff Davis <[email protected]>    
date     : Tue, 10 Oct 2023 11:01:13 -0700    
  
committer: Jeff Davis <[email protected]>    
date     : Tue, 10 Oct 2023 11:01:13 -0700    

Click here for diff

Mark the buffers dirty before writing WAL.  
  
Discussion: https://postgr.es/m/[email protected]  
Reviewed-by: Heikki Linnakangas  
Backpatch-through: 11  

M src/backend/access/transam/generic_xlog.c

Doc: use CURRENT_USER not USER in plpgsql trigger examples.

commit   : 9f597bafac20d78db713904f97425e2994e6d6b0    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 9 Oct 2023 11:29:21 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 9 Oct 2023 11:29:21 -0400    

Click here for diff

While these two built-in functions do exactly the same thing,  
CURRENT_USER seems preferable to use in documentation examples.  
It's easier to look up if the reader is unsure what it is.  
Also, this puts these examples in sync with an adjacent example  
that already used CURRENT_USER.  
  
Per question from Kirk Parker.  
  
Discussion: https://postgr.es/m/CANwZ8rmN_Eb0h0hoMRS8Feftaik0z89PxVsKg+cP+PctuOq=Qg@mail.gmail.com  

M doc/src/sgml/plpgsql.sgml

Remove extra parenthesis from comment.

commit   : 6e331c4a4faaf445f5a060b7aacd5da42b69740a    
  
author   : Etsuro Fujita <[email protected]>    
date     : Fri, 6 Oct 2023 18:30:05 +0900    
  
committer: Etsuro Fujita <[email protected]>    
date     : Fri, 6 Oct 2023 18:30:05 +0900    

Click here for diff

M src/backend/storage/ipc/procarray.c

Fix memory leak in Memoize code

commit   : e4b95b9b02b24c752210839304891e855176e394    
  
author   : David Rowley <[email protected]>    
date     : Thu, 5 Oct 2023 20:32:14 +1300    
  
committer: David Rowley <[email protected]>    
date     : Thu, 5 Oct 2023 20:32:14 +1300    

Click here for diff

Ensure we switch to the per-tuple memory context to prevent any memory  
leaks of detoasted Datums in MemoizeHash_hash() and MemoizeHash_equal().  
  
Reported-by: Orlov Aleksej  
Author: Orlov Aleksej, David Rowley  
Discussion: https://postgr.es/m/83281eed63c74e4f940317186372abfd%40cft.ru  
Backpatch-through: 14, where Memoize was added  

M src/backend/executor/nodeMemoize.c

Avoid memory size overflow when allocating backend activity buffer

commit   : f91c87b31463d2e368189ca35aaefc07b54aeef1    
  
author   : Michael Paquier <[email protected]>    
date     : Tue, 3 Oct 2023 15:37:21 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Tue, 3 Oct 2023 15:37:21 +0900    

Click here for diff

The code in charge of copying the contents of PgBackendStatus to local  
memory could fail on memory allocation because of an overflow on the  
amount of memory to use.  The overflow can happen when combining a high  
value track_activity_query_size (max at 1MB) with a large  
max_connections, when both multiplied get higher than INT32_MAX as both  
parameters treated as signed integers.  This could for example trigger  
with the following functions, all calling pgstat_read_current_status():  
- pg_stat_get_backend_subxact()  
- pg_stat_get_backend_idset()  
- pg_stat_get_progress_info()  
- pg_stat_get_activity()  
- pg_stat_get_db_numbackends()  
  
The change to use MemoryContextAllocHuge() has been introduced in  
8d0ddccec636, so backpatch down to 12.  
  
Author: Jakub Wartak  
Discussion: https://postgr.es/m/CAKZiRmw8QSNVw2qNK-dznsatQqz+9DkCquxP0GHbbv1jMkGHMA@mail.gmail.com  
Backpatch-through: 12  

M src/backend/utils/activity/backend_status.c

Fail hard on out-of-memory failures in xlogreader.c

commit   : baeb8542c1cc849e58c016f401687b9c4d3e7f20    
  
author   : Michael Paquier <[email protected]>    
date     : Tue, 3 Oct 2023 10:25:15 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Tue, 3 Oct 2023 10:25:15 +0900    

Click here for diff

This commit changes the WAL reader routines so as a FATAL for the  
backend or exit(FAILURE) for the frontend is triggered if an allocation  
for a WAL record decode fails in walreader.c, rather than treating this  
case as bogus data, which would be equivalent to the end of WAL.  The  
key is to avoid palloc_extended(MCXT_ALLOC_NO_OOM) in walreader.c,  
relying on plain palloc() calls.  
  
The previous behavior could make WAL replay finish too early than it  
should.  For example, crash recovery finishing earlier may corrupt  
clusters because not all the WAL available locally was replayed to  
ensure a consistent state.  Out-of-memory failures would show up  
randomly depending on the memory pressure on the host, but one simple  
case would be to generate a large record, then replay this record after  
downsizing a host, as Ethan Mertz originally reported.  
  
This relies on bae868caf222, as the WAL reader routines now do the  
memory allocation required for a record only once its header has been  
fully read and validated, making xl_tot_len trustable.  Making the WAL  
reader react differently on out-of-memory or bogus record data would  
require ABI changes, so this is the safest choice for stable branches.  
Also, it is worth noting that 3f1ce973467a has been using a plain  
palloc() in this code for some time now.  
  
Thanks to Noah Misch and Thomas Munro for the discussion.  
  
Like the other commit, backpatch down to 12, leaving out v11 that will  
be EOL'd soon.  The behavior of considering a failed allocation as bogus  
data comes originally from 0ffe11abd3a0, where the record length  
retrieved from its header was not entirely trustable.  
  
Reported-by: Ethan Mertz  
Discussion: https://postgr.es/m/[email protected]  
Backpatch-through: 12  

M src/backend/access/transam/xlogreader.c

Fix omission of column-level privileges in selective pg_restore.

commit   : 829d91cc62b8769c27ed0eb368500fc5664f5fa7    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 2 Oct 2023 13:27:51 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 2 Oct 2023 13:27:51 -0400    

Click here for diff

In a selective restore, ACLs for a table should be dumped if the  
table is selected to be dumped.  However, if the table has both  
table-level and column-level ACLs, only the table-level ACL was  
restored.  This happened because _tocEntryRequired assumed that  
an ACL could have only one dependency (the one on its table),  
and punted if there was more than one.  But since commit ea9125304,  
column-level ACLs also depend on the table-level ACL if any, to  
ensure correct ordering in parallel restores.  To fix, adjust the  
logic in _tocEntryRequired to ignore dependencies on ACLs.  
  
I extended a test case in 002_pg_dump.pl so that it purports to  
test for this; but in fact the test passes even without the fix.  
That's because this bug only manifests during a selective restore,  
while the scenarios 002_pg_dump.pl tests include only selective dumps.  
Perhaps somebody would like to extend the script so that it can test  
scenarios including selective restore, but I'm not touching that.  
  
Euler Taveira and Tom Lane, per report from Kong Man.  
Back-patch to all supported branches.  
  
Discussion: https://postgr.es/m/DM4PR11MB73976902DBBA10B1D652F9498B06A@DM4PR11MB7397.namprd11.prod.outlook.com  

M src/bin/pg_dump/pg_backup_archiver.c
M src/bin/pg_dump/t/002_pg_dump.pl

Flush WAL stats in bgwriter

commit   : 594001864a36a1b9d24dec618cf5f629d7cc3caa    
  
author   : Heikki Linnakangas <[email protected]>    
date     : Mon, 2 Oct 2023 12:39:35 +0300    
  
committer: Heikki Linnakangas <[email protected]>    
date     : Mon, 2 Oct 2023 12:39:35 +0300    

Click here for diff

bgwriter can write out WAL, but did not flush the WAL pgstat counters,  
so the writes were not seen in pg_stat_wal.  
  
Back-patch to v14, where pg_stat_wal was introduced.  
  
Author: Nazir Bilal Yavuz  
Reviewed-by: Matthias van de Meent, Kyotaro Horiguchi  
Discussion: https://www.postgresql.org/message-id/CAN55FZ2FPYngovZstr%3D3w1KSEHe6toiZwrurbhspfkXe5UDocg%40mail.gmail.com  

M src/backend/postmaster/bgwriter.c

Fix datalen calculation in tsvectorrecv().

commit   : cf12c4fd2912c23083a990febe55f79d0253a554    
  
author   : Tom Lane <[email protected]>    
date     : Sun, 1 Oct 2023 13:16:47 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Sun, 1 Oct 2023 13:16:47 -0400    

Click here for diff

After receiving position data for a lexeme, tsvectorrecv()  
advanced its "datalen" value by (npos+1)*sizeof(WordEntry)  
where the correct calculation is (npos+1)*sizeof(WordEntryPos).  
This accidentally failed to render the constructed tsvector  
invalid, but it did result in leaving some wasted space  
approximately equal to the space consumed by the position data.  
That could have several bad effects:  
  
* Disk space is wasted if the received tsvector is stored into a  
  table as-is.  
  
* A legal tsvector could get rejected with "maximum total lexeme  
  length exceeded" if the extra space pushes it over the MAXSTRPOS  
  limit.  
  
* In edge cases, the finished tsvector could be assigned a length  
  larger than the allocated size of its palloc chunk, conceivably  
  leading to SIGSEGV when the tsvector gets copied somewhere else.  
  The odds of a field failure of this sort seem low, though valgrind  
  testing could probably have found this.  
  
While we're here, let's express the calculation as  
"sizeof(uint16) + npos * sizeof(WordEntryPos)" to avoid the type  
pun implicit in the "npos + 1" formulation.  It's not wrong  
given that WordEntryPos had better be 2 bytes to avoid padding  
problems, but it seems clearer this way.  
  
Report and patch by Denis Erokhin.  Back-patch to all supported  
versions.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/utils/adt/tsvector.c

In COPY FROM, fail cleanly when unsupported encoding conversion is needed.

commit   : a715c02122e7be8ff631e5ea28b80ec7307f39e6    
  
author   : Tom Lane <[email protected]>    
date     : Sun, 1 Oct 2023 12:09:26 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Sun, 1 Oct 2023 12:09:26 -0400    

Click here for diff

In recent releases, such cases fail with "cache lookup failed for  
function 0" rather than complaining that the conversion function  
doesn't exist as prior versions did.  Seems to be a consequence of  
sloppy refactoring in commit f82de5c46.  Add the missing error check.  
  
Per report from Pierre Fortin.  Back-patch to v14 where the  
oversight crept in.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/commands/copyfrom.c

Fix briefly showing old progress stats for ANALYZE on inherited tables.

commit   : 2d4f99bc693aef5387834333eef06776777f4783    
  
author   : Heikki Linnakangas <[email protected]>    
date     : Sat, 30 Sep 2023 17:03:50 +0300    
  
committer: Heikki Linnakangas <[email protected]>    
date     : Sat, 30 Sep 2023 17:03:50 +0300    

Click here for diff

ANALYZE on a table with inheritance children analyzes all the child  
tables in a loop. When stepping to next child table, it updated the  
child rel ID value in the command progress stats, but did not reset  
the 'sample_blks_total' and 'sample_blks_scanned' counters.  
acquire_sample_rows() updates 'sample_blks_total' as soon as the scan  
starts and 'sample_blks_scanned' after processing the first block, but  
until then, pg_stat_progress_analyze would display a bogus combination  
of the new child table relid with old counter values from the  
previously processed child table. Fix by resetting 'sample_blks_total'  
and 'sample_blks_scanned' to zero at the same time that  
'current_child_table_relid' is updated.  
  
Backpatch to v13, where pg_stat_progress_analyze view was introduced.  
  
Reported-by: Justin Pryzby  
Discussion: https://www.postgresql.org/message-id/20230122162345.GP13860%40telsasoft.com  

M src/backend/commands/analyze.c

Remove environment sensitivity in pl/tcl regression test.

commit   : fd6a06fccb65ea864ae9886305dcc9b4d81052db    
  
author   : Tom Lane <[email protected]>    
date     : Fri, 29 Sep 2023 20:20:57 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Fri, 29 Sep 2023 20:20:57 -0400    

Click here for diff

Add "-gmt 1" to our test invocations of the Tcl "clock" command,  
so that they do not consult the timezone environment.  While it  
doesn't really matter which timezone is used here, it does  
matter that the command not fall over entirely.  We've now  
discovered that at least on FreeBSD, "clock scan" will fail if  
/etc/localtime is missing.  It seems worth making the test  
insensitive to that.  
  
Per Tomas Vondras' buildfarm animal dikkop.  Thanks to  
Thomas Munro for the diagnosis.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/pl/tcl/expected/pltcl_setup.out
M src/pl/tcl/sql/pltcl_setup.sql

commit   : e9d1560d3e4d01c2aef176340b2d3f93d884922b    
  
author   : Tom Lane <[email protected]>    
date     : Fri, 29 Sep 2023 14:07:30 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Fri, 29 Sep 2023 14:07:30 -0400    

Click here for diff

As of Xcode 15 (macOS Sonoma), the linker complains about duplicate  
references to the same library.  We see warnings about libpgport and  
libpgcommon being duplicated in many client executables.  This is a  
consequence of the hack introduced in commit 6b7ef076b to list  
libpgport before libpq while not removing it from $(LIBS).  
(Commit 8396447cd later applied the same rule to libpgcommon.)  
  
The concern in 6b7ef076b was to ensure that the client executable  
wouldn't unintentionally depend on pgport functions from libpq.  
That concern is obsolete on any platform for which we can do symbol  
export control, because if we can then the pgport functions in libpq  
won't be exposed anyway.  Hence, we can fix this problem by just  
removing libpgport and libpgcommon from $(libpq_pgport), and letting  
clients depend on the occurrences in $(LIBS).  
  
In the back branches, do that only on macOS (which we know has  
symbol export control).  In HEAD, let's be more aggressive and  
remove the extra libraries everywhere.  The only still-supported  
platforms that lack export control are MinGW/Cygwin, and it  
doesn't seem worth sweating over ABI stability details for those  
(or if somebody does care, it'd probably be possible to perform  
symbol export control for those too).  As well as being simpler,  
this might give some microscopic improvement in build time.  
  
The meson build system is not changed here, as it doesn't have  
this particular disease, though it does have some related issues  
that we'll fix separately.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/Makefile.global.in

Doc: improve description of dump/restore's --clean and --if-exists.

commit   : e8ccae5d5c3ed24ab8a5fe28ed65cedbc9fda5bf    
  
author   : Tom Lane <[email protected]>    
date     : Fri, 29 Sep 2023 13:13:54 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Fri, 29 Sep 2023 13:13:54 -0400    

Click here for diff

Try to make these option descriptions a little clearer for novices.  
Per gripe from Attila GulyƔs.  
  
Discussion: https://postgr.es/m/169590536647.3727336.11070254203649648453@wrigleys.postgresql.org  

M doc/src/sgml/ref/pg_dump.sgml
M doc/src/sgml/ref/pg_dumpall.sgml
M doc/src/sgml/ref/pg_restore.sgml

doc: Change statistics function xref to the right target

commit   : 0ae01cc8bf4f159496f1c73b818067b81923a148    
  
author   : Daniel Gustafsson <[email protected]>    
date     : Fri, 29 Sep 2023 15:55:37 +0200    
  
committer: Daniel Gustafsson <[email protected]>    
date     : Fri, 29 Sep 2023 15:55:37 +0200    

Click here for diff

Commit 7d3b7011b added a link to the statistics functions, which at the  
time were anchored under the section for statistics views.  aebe989477a  
added a separate section for statistics functions, but the link was not  
updated to point to the new anchor.  Fix by changing the xref.  
  
Backpatch to all supported branches.  
  
Author: Peter Smith <[email protected]>  
Discussion: https://postgr.es/m/CAHut+Ptr0jKzNNtWnssLq+3jNhbyaBseqf6NPrWHk08mQFRoTg@mail.gmail.com  
Backpatch-through: 11  

M doc/src/sgml/func.sgml

Fix btmarkpos/btrestrpos array key wraparound bug.

commit   : 41486c4aaeb10dcc948b2592168123df273a9e9d    
  
author   : Peter Geoghegan <[email protected]>    
date     : Thu, 28 Sep 2023 16:29:29 -0700    
  
committer: Peter Geoghegan <[email protected]>    
date     : Thu, 28 Sep 2023 16:29:29 -0700    

Click here for diff

nbtree's mark/restore processing failed to correctly handle an edge case  
involving array key advancement and related search-type scan key state.  
Scans with ScalarArrayScalarArrayOpExpr quals requiring mark/restore  
processing (for a merge join) could incorrectly conclude that an  
affected array/scan key must not have advanced during the time between  
marking and restoring the scan's position.  
  
As a result of all this, array key handling within btrestrpos could skip  
a required call to _bt_preprocess_keys().  This confusion allowed later  
primitive index scans to overlook tuples matching the true current array  
keys.  The scan's search-type scan keys would still have spurious values  
corresponding to the final array element(s) -- not values matching the  
first/now-current array element(s).  
  
To fix, remember that "array key wraparound" has taken place during the  
ongoing btrescan in a flag variable stored in the scan's state, and use  
that information at the point where btrestrpos decides if another call  
to _bt_preprocess_keys is required.  
  
Oversight in commit 70bc5833, which taught nbtree to handle array keys  
during mark/restore processing, but missed this subtlety.  That commit  
was itself a bug fix for an issue in commit 9e8da0f7, which taught  
nbtree to handle ScalarArrayOpExpr quals natively.  
  
Author: Peter Geoghegan <[email protected]>  
Discussion: https://postgr.es/m/CAH2-WzkgP3DDRJxw6DgjCxo-cu-DKrvjEv_ArkP2ctBJatDCYg@mail.gmail.com  
Backpatch: 11- (all supported branches).  

M src/backend/access/nbtree/nbtree.c
M src/backend/access/nbtree/nbtutils.c
M src/include/access/nbtree.h

Fix checking of index expressions in CompareIndexInfo().

commit   : 9d6d8d7049ea80f4d179afa48e76d0e91514304b    
  
author   : Tom Lane <[email protected]>    
date     : Thu, 28 Sep 2023 14:05:25 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Thu, 28 Sep 2023 14:05:25 -0400    

Click here for diff

This code was sloppy about comparison of index columns that  
are expressions.  It didn't reliably reject cases where one  
index has an expression where the other has a plain column,  
and it could index off the start of the attmap array, leading  
to a Valgrind complaint (though an actual crash seems unlikely).  
  
I'm not sure that the expression-vs-column sloppiness leads  
to any visible problem in practice, because the subsequent  
comparison of the two expression lists would reject cases  
where the indexes have different numbers of expressions  
overall.  Maybe we could falsely match indexes having the  
same expressions in different column positions, but it'd  
require unlucky contents of the word before the attmap array.  
It's not too surprising that no problem has been reported  
from the field.  Nonetheless, this code is clearly wrong.  
  
Per bug #18135 from Alexander Lakhin.  Back-patch to all  
supported branches.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/catalog/index.c

Add missing TidRangePath handling in print_path()

commit   : 9861fe2cdd0216f6e25377cab3b95fccd854de84    
  
author   : David Rowley <[email protected]>    
date     : Fri, 29 Sep 2023 00:04:03 +1300    
  
committer: David Rowley <[email protected]>    
date     : Fri, 29 Sep 2023 00:04:03 +1300    

Click here for diff

Tid Range scans were added back in bb437f995.  That commit forgot to add  
handling for TidRangePaths in print_path().  
  
Only people building with OPTIMIZER_DEBUG might have noticed this, which  
likely is the reason it's taken 4 years for anyone to notice.  
  
Author: Andrey Lepikhov  
Reported-by: Andrey Lepikhov  
Discussion: https://postgr.es/m/[email protected]  
Backpatch-through: 14, where bb437f995 was introduced  

M src/backend/optimizer/path/allpaths.c

Fix typo in src/backend/access/transam/README.

commit   : c33d42d2e95d7994582ea3b811826088b76ce4e2    
  
author   : Etsuro Fujita <[email protected]>    
date     : Thu, 28 Sep 2023 19:45:05 +0900    
  
committer: Etsuro Fujita <[email protected]>    
date     : Thu, 28 Sep 2023 19:45:05 +0900    

Click here for diff

M src/backend/access/transam/README

unaccent: Tweak value of PYTHON when building without Python support

commit   : e4d7ad30f0aa932410d5929238d160ff0ed25f4b    
  
author   : Michael Paquier <[email protected]>    
date     : Wed, 27 Sep 2023 14:41:23 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Wed, 27 Sep 2023 14:41:23 +0900    

Click here for diff

As coded, the module's Makefile would fail to set a value for PYTHON as  
it checked if the variable is defined.  When compiling without  
--with-python, PYTHON is defined and set to an empty value, so the  
existing check is not able to do its work.  
  
This commit switches the rule to check if the value is empty rather than  
defined, allowing the generation of unaccent.rules even if --with-python  
is not used as long as "python" exists.  BISON and FLEX do the same in  
pgxs.mk, for instance.  
  
Thinko in f85a485f89e2.  
  
Author: Japin Li  
Discussion: https://postgr.es/m/MEYP282MB1669F86C0DC7B4DC48489CB0B6C3A@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM  
Backpatch-through: 13  

M contrib/unaccent/Makefile

Stop using "-multiply_defined suppress" on macOS.

commit   : 5d60e8ed3f1833c64b9114a9623bbc9ab5748554    
  
author   : Tom Lane <[email protected]>    
date     : Tue, 26 Sep 2023 21:06:21 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Tue, 26 Sep 2023 21:06:21 -0400    

Click here for diff

We started to use this linker switch in commit 9df308697 of  
2004-07-13, which was in the OS X 10.3 era.  Apparently it's been a  
no-op since around OS X 10.9.  Apple's most recent toolchain version  
actively complains about it, so it's time to get rid of it.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/Makefile.shlib

doc: clarify the effect of concurrent work_mem allocations

commit   : aa7d0b6cf954c53e9e7f446c9cd75761013d6f35    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 26 Sep 2023 19:44:21 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 26 Sep 2023 19:44:21 -0400    

Click here for diff

Reported-by: Sami Imseih  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 11  

M doc/src/sgml/config.sgml

doc: clarify handling of time zones with "time with time zone"

commit   : 587a3563cbb5523508c3610918b38deb5e957430    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 26 Sep 2023 19:23:59 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 26 Sep 2023 19:23:59 -0400    

Click here for diff

Reported-by: [email protected]  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 11  

M doc/src/sgml/datatype.sgml

doc: clarify the behavior of unopenable listen_addresses

commit   : 7cdaa2a73a9f210f73d2a512c1b372d5a2bf346b    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 26 Sep 2023 19:02:18 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 26 Sep 2023 19:02:18 -0400    

Click here for diff

Reported-by: Gurjeet Singh  
  
Discussion: https://postgr.es/m/CABwTF4WYPD9ov-kcSq1+J+ZJ5wYDQLXquY6Lu2cvb-Y7pTpSGA@mail.gmail.com  
  
Backpatch-through: 11  

M doc/src/sgml/config.sgml

doc: pg_upgrade, clarify standby servers must remain running

commit   : f1780eaf485320eebdcdb98dcc8fd187fba27f25    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 26 Sep 2023 18:54:10 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 26 Sep 2023 18:54:10 -0400    

Click here for diff

Also mention that mismatching primary/standby LSNs should never  
happen.  
  
Reported-by: Nikolay Samokhvalov  
  
Discussion: https://postgr.es/m/CAM527d8heqkjG5VrvjU3Xjsqxg41ufUyabD9QZccdAxnpbRH-Q@mail.gmail.com  
  
Backpatch-through: 11  

M doc/src/sgml/ref/pgupgrade.sgml

doc: mention GROUP BY columns can reference target col numbers

commit   : 28919a063d8c8b81ca574ac063e26304f41ed2fe    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 26 Sep 2023 17:31:06 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 26 Sep 2023 17:31:06 -0400    

Click here for diff

Reported-by: hape <[email protected]>  
  
Discussion: https://postgr.es/m/[email protected]  
  
Backpatch-through: 11  

M doc/src/sgml/ref/select.sgml

Fix another bug in parent page splitting during GiST index build.

commit   : 747cef5a58ca9122aca4e7a901d1f22ef70d94bc    
  
author   : Heikki Linnakangas <[email protected]>    
date     : Tue, 26 Sep 2023 14:14:49 +0300    
  
committer: Heikki Linnakangas <[email protected]>    
date     : Tue, 26 Sep 2023 14:14:49 +0300    

Click here for diff

Yet another bug in the ilk of commits a7ee7c851 and 741b88435. In  
741b88435, we took care to clear the memorized location of the  
downlink when we split the parent page, because splitting the parent  
page can move the downlink. But we missed that even *updating* a tuple  
on the parent can move it, because updating a tuple on a gist page is  
implemented as a delete+insert, so the updated tuple gets moved to the  
end of the page.  
  
This commit fixes the bug in two different ways (belt and suspenders):  
  
1. Clear the downlink when we update a tuple on the parent page, even  
   if it's not split. This the same approach as in commits a7ee7c851  
   and 741b88435.  
  
   I also noticed that gistFindCorrectParent did not clear the  
   'downlinkoffnum' when it stepped to the right sibling. Fix that  
   too, as it seems like a clear bug even though I haven't been able  
   to find a test case to hit that.  
  
2. Change gistFindCorrectParent so that it treats 'downlinkoffnum'  
   merely as a hint. It now always first checks if the downlink is  
   still at that location, and if not, it scans the page like before.  
   That's more robust if there are still more cases where we fail to  
   clear 'downlinkoffnum' that we haven't yet uncovered. With this,  
   it's no longer necessary to meticulously clear 'downlinkoffnum',  
   so this makes the previous fixes unnecessary, but I didn't revert  
   them because it still seems nice to clear it when we know that the  
   downlink has moved.  
  
Also add the test case using the same test data that Alexander  
posted. I tried to reduce it to a smaller test, and I also tried to  
reproduce this with different test data, but I was not able to, so  
let's just include what we have.  
  
Backpatch to v12, like the previous fixes.  
  
Reported-by: Alexander Lakhin  
Discussion: https://www.postgresql.org/message-id/[email protected]  

M contrib/intarray/expected/_int.out
M contrib/intarray/sql/_int.sql
M src/backend/access/gist/gist.c

doc: Tell about "vcregress taptest" for regression tests on Windows

commit   : 0c4d7a12687c44a00f5ce849960bcc70a8b1dfb8    
  
author   : Michael Paquier <[email protected]>    
date     : Tue, 26 Sep 2023 08:16:44 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Tue, 26 Sep 2023 08:16:44 +0900    

Click here for diff

There was no mention of this command in the documentation, and it is  
useful to run the TAP tests of a target source directory.  
  
Author: Yugo Nagata  
Discussion: https://postgr.es/m/[email protected]  
Backpatch-through: 11  

M doc/src/sgml/install-windows.sgml

Fix edge-case for xl_tot_len broken by bae868ca.

commit   : 3d413c5a76fab4e374960ba6929545469c44aa13    
  
author   : Thomas Munro <[email protected]>    
date     : Tue, 26 Sep 2023 09:07:26 +1300    
  
committer: Thomas Munro <[email protected]>    
date     : Tue, 26 Sep 2023 09:07:26 +1300    

Click here for diff

bae868ca removed a check that was still needed.  If you had an  
xl_tot_len at the end of a page that was too small for a record header,  
but not big enough to span onto the next page, we'd immediately perform  
the CRC check using a bogus large length.  Because of arbitrary coding  
differences between the CRC implementations on different platforms,  
nothing very bad happened on common modern systems.  On systems using  
the _sb8.c fallback we could segfault.  
  
Restore that check, add a new assertion and supply a test for that case.  
Back-patch to 12, like bae868ca.  
  
Tested-by: Tom Lane <[email protected]>  
Tested-by: Alexander Lakhin <[email protected]>  
Discussion: https://postgr.es/m/CA%2BhUKGLCkTT7zYjzOxuLGahBdQ%3DMcF%3Dz5ZvrjSOnW4EDhVjT-g%40mail.gmail.com  

M src/backend/access/transam/xlogreader.c
M src/test/recovery/t/039_end_of_wal.pl

pg_dump: tests: Correct test condition for invalid databases

commit   : 4dfb610822d5ab4bea7820da9be02d83bad69fb5    
  
author   : Andres Freund <[email protected]>    
date     : Mon, 25 Sep 2023 11:50:02 -0700    
  
committer: Andres Freund <[email protected]>    
date     : Mon, 25 Sep 2023 11:50:02 -0700    

Click here for diff

For some reason I used not_like = { pg_dumpall_dbprivs => 1, } in the test  
condition of one of the tests added in in c66a7d75e65. That doesn't make sense  
for two reasons: 1) not_like isn't a valid test condition 2) the database  
should not be dumped in any of the tests.  Due to 1), the test achieved its  
goal, but clearly the formulation is confusing.  Instead use like => {}, with  
a comment explaining why.  
  
Reported-by: Peter Eisentraut <[email protected]>  
Discussion: https://postgr.es/m/[email protected]  
Backpatch: 11-, like c66a7d75e65  

M src/bin/pg_dump/t/002_pg_dump.pl

Collect dependency information for parsed CallStmts.

commit   : 5cff431bc9b812a712a89badf24a8479aaa25bef    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 25 Sep 2023 14:41:57 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 25 Sep 2023 14:41:57 -0400    

Click here for diff

Parse analysis of a CallStmt will inject mutable information,  
for instance the OID of the called procedure, so that subsequent  
DDL may create a need to re-parse the CALL.  We failed to detect  
this for CALLs in plpgsql routines, because no dependency information  
was collected when putting a CallStmt into the plan cache.  That  
could lead to misbehavior or strange errors such as "cache lookup  
failed".  
  
Before commit ee895a655, the issue would only manifest for CALLs  
appearing in atomic contexts, because we re-planned non-atomic  
CALLs every time through anyway.  
  
It is now apparent that extract_query_dependencies() probably  
needs a special case for every utility statement type for which  
stmt_requires_parse_analysis() returns true.  I wanted to add  
something like Assert(!stmt_requires_parse_analysis(...)) when  
falling out of extract_query_dependencies_walker without doing  
anything, but there are API issues as well as a more fundamental  
point: stmt_requires_parse_analysis is supposed to be applied to  
raw parser output, so it'd be cheating to assume it will give the  
correct answer for post-parse-analysis trees.  I contented myself  
with adding a comment.  
  
Per bug #18131 from Christian Stork.  Back-patch to all supported  
branches.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/optimizer/plan/setrefs.c
M src/pl/plpgsql/src/expected/plpgsql_call.out
M src/pl/plpgsql/src/sql/plpgsql_call.sql

Limit to_tsvector_byid's initial array allocation to something sane.

commit   : a2799f53d519d6d7dba236ab02411cd232cea061    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 25 Sep 2023 11:50:28 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 25 Sep 2023 11:50:28 -0400    

Click here for diff

The initial estimate of the number of distinct ParsedWords is just  
that: an estimate.  Don't let it exceed what palloc is willing to  
allocate.  If in fact we need more entries, we'll eventually fail  
trying to enlarge the array.  But if we don't, this allows success on  
inputs that currently draw "invalid memory alloc request size".  
  
Per bug #18080 from Uwe Binder.  Back-patch to all supported branches.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/tsearch/to_tsany.c

pg_upgrade: check for types removed in pg12

commit   : 26c291a152439dfd7e9d0368ccd0f6edff8f25ea    
  
author   : Alvaro Herrera <[email protected]>    
date     : Mon, 25 Sep 2023 14:34:06 +0200    
  
committer: Alvaro Herrera <[email protected]>    
date     : Mon, 25 Sep 2023 14:34:06 +0200    

Click here for diff

Commit cda6a8d01d39 removed a few datatypes, but didn't update  
pg_upgrade --check to throw error if these types are used.  So the users  
find that pg_upgrade --check tells them that everything is fine, only to  
fail when the real upgrade is attempted.  
  
Reviewed-by: Tristan Partin <[email protected]>  
Reviewed-by: Suraj Kharage <[email protected]>  
Discussion: https://postgr.es/m/[email protected]  

M src/bin/pg_upgrade/check.c

Don't use Perl pack('Q') in 039_end_of_wal.pl.

commit   : afa504ba2f5d486b8adbc8aace092bfe0531b913    
  
author   : Thomas Munro <[email protected]>    
date     : Sat, 23 Sep 2023 14:13:06 +1200    
  
committer: Thomas Munro <[email protected]>    
date     : Sat, 23 Sep 2023 14:13:06 +1200    

Click here for diff

'Q' for 64 bit integers turns out not to work on 32 bit Perl, as  
revealed by the build farm.  Use 'II' instead, and deal with endianness.  
  
Back-patch to 12, like bae868ca.  
  
Discussion: https://postgr.es/m/ZQ4r1vHcryBsSi_V%40paquier.xyz  

M src/test/recovery/t/039_end_of_wal.pl

Don't trust unvalidated xl_tot_len.

commit   : 3ce3b53d76a3d7da2cad9e5a73b5574ae5e5b2a2    
  
author   : Thomas Munro <[email protected]>    
date     : Sat, 23 Sep 2023 10:26:24 +1200    
  
committer: Thomas Munro <[email protected]>    
date     : Sat, 23 Sep 2023 10:26:24 +1200    

Click here for diff

xl_tot_len comes first in a WAL record.  Usually we don't trust it to be  
the true length until we've validated the record header.  If the record  
header was split across two pages, previously we wouldn't do the  
validation until after we'd already tried to allocate enough memory to  
hold the record, which was bad because it might actually be garbage  
bytes from a recycled WAL file, so we could try to allocate a lot of  
memory.  Release 15 made it worse.  
  
Since 70b4f82a4b5, we'd at least generate an end-of-WAL condition if the  
garbage 4 byte value happened to be > 1GB, but we'd still try to  
allocate up to 1GB of memory bogusly otherwise.  That was an  
improvement, but unfortunately release 15 tries to allocate another  
object before that, so you could get a FATAL error and recovery could  
fail.  
  
We can fix both variants of the problem more fundamentally using  
pre-existing page-level validation, if we just re-order some logic.  
  
The new order of operations in the split-header case defers all memory  
allocation based on xl_tot_len until we've read the following page.  At  
that point we know that its first few bytes are not recycled data, by  
checking its xlp_pageaddr, and that its xlp_rem_len agrees with  
xl_tot_len on the preceding page.  That is strong evidence that  
xl_tot_len was truly the start of a record that was logged.  
  
This problem was most likely to occur on a standby, because  
walreceiver.c recycles WAL files without zeroing out trailing regions of  
each page.  We could fix that too, but it wouldn't protect us from rare  
crash scenarios where the trailing zeroes don't make it to disk.  
  
With reliable xl_tot_len validation in place, the ancient policy of  
considering malloc failure to indicate corruption at end-of-WAL seems  
quite surprising, but changing that is left for later work.  
  
Also included is a new TAP test to exercise various cases of end-of-WAL  
detection by writing contrived data into the WAL from Perl.  
  
Back-patch to 12.  We decided not to put this change into the final  
release of 11.  
  
Author: Thomas Munro <[email protected]>  
Author: Michael Paquier <[email protected]>  
Reported-by: Alexander Lakhin <[email protected]>  
Reviewed-by: Noah Misch <[email protected]> (the idea, not the code)  
Reviewed-by: Michael Paquier <[email protected]>  
Reviewed-by: Sergei Kornilov <[email protected]>  
Reviewed-by: Alexander Lakhin <[email protected]>  
Discussion: https://postgr.es/m/17928-aa92416a70ff44a2%40postgresql.org  

M src/backend/access/transam/xlogreader.c
M src/test/perl/TestLib.pm
A src/test/recovery/t/039_end_of_wal.pl

Doc: copy-edit the introductory para for the pg_class catalog.

commit   : bbb9bec11c58c8c6401abf696c43626028edeb6a    
  
author   : Tom Lane <[email protected]>    
date     : Fri, 22 Sep 2023 14:52:36 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Fri, 22 Sep 2023 14:52:36 -0400    

Click here for diff

The previous wording had a faint archaic whiff to it, and more  
importantly used "catalogs" as a verb, which while cutely  
self-referential seems likely to provoke confusion in this  
particular context.  Also consistently use "kind" not "type" to  
refer to the different kinds of relations distinguished by relkind.  
  
Per gripe from Martin Nash.  Back-patch to supported versions.  
  
Discussion: https://postgr.es/m/[email protected]  

M doc/src/sgml/catalogs.sgml

Fix COMMIT/ROLLBACK AND CHAIN in the presence of subtransactions.

commit   : 10323f140fef776881923f1afc0a369f7be8e035    
  
author   : Tom Lane <[email protected]>    
date     : Thu, 21 Sep 2023 23:11:31 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Thu, 21 Sep 2023 23:11:31 -0400    

Click here for diff

In older branches, COMMIT/ROLLBACK AND CHAIN failed to propagate  
the current transaction's properties to the new transaction if  
there was any open subtransaction (unreleased savepoint).  
Instead, some previous transaction's properties would be restored.  
This is because the "if (s->chain)" check in CommitTransactionCommand  
examined the wrong instance of the "chain" flag and falsely  
concluded that it didn't need to save transaction properties.  
  
Our regression tests would have noticed this, except they used  
identical transaction properties for multiple tests in a row,  
so that the faulty behavior was not distinguishable from correct  
behavior.  
  
Commit 12d768e70 fixed the problem in v15 and later, but only rather  
accidentally, because I removed the "if (s->chain)" test to avoid a  
compiler warning, while not realizing that the warning was flagging a  
real bug.  
  
In v14 and before, remove the if-test and save transaction properties  
unconditionally; just as in the newer branches, that's not expensive  
enough to justify thinking harder.  
  
Add the comment and extra regression test to v15 and later to  
forestall any future recurrence, but there's no live bug in those  
branches.  
  
Patch by me, per bug #18118 from Liu Xiang.  Back-patch to v12 where  
the AND CHAIN feature was added.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/access/transam/xact.c
M src/test/regress/expected/transactions.out
M src/test/regress/sql/transactions.sql

Update comment about set_join_pathlist_hook().

commit   : c7c4ce2be363ac5cf5141e73fd7966e0bbfe401f    
  
author   : Etsuro Fujita <[email protected]>    
date     : Thu, 21 Sep 2023 19:45:05 +0900    
  
committer: Etsuro Fujita <[email protected]>    
date     : Thu, 21 Sep 2023 19:45:05 +0900    

Click here for diff

The comment introduced by commit e7cb7ee14 was a bit too terse, which  
could lead to extensions doing different things within the hook function  
than we intend to allow.  Extend the comment to explain what they can do  
within the hook function.  
  
Back-patch to all supported branches.  
  
In passing, I rephrased a nearby comment that I recently added to the  
back branches.  
  
Reviewed by David Rowley and Andrei Lepikhov.  
  
Discussion: https://postgr.es/m/CAPmGK15SBPA1nr3Aqsdm%2BYyS-ay0Ayo2BRYQ8_A2To9eLqwopQ%40mail.gmail.com  

M src/backend/optimizer/path/joinpath.c

Fix GiST README's explanation of the NSN cross-check.

commit   : 78df27e2ff52d1798f11bd558566746f2d224d8b    
  
author   : Heikki Linnakangas <[email protected]>    
date     : Tue, 19 Sep 2023 11:53:51 +0300    
  
committer: Heikki Linnakangas <[email protected]>    
date     : Tue, 19 Sep 2023 11:53:51 +0300    

Click here for diff

The text got the condition backwards, it's "NSN > LSN", not "NSN < LSN".  
While we're at it, expand it a little for clarity.  
  
Reviewed-by: Daniel Gustafsson  
Discussion: https://www.postgresql.org/message-id/[email protected]  

M src/backend/access/gist/README

Fix assertion failure with PL/Python exceptions

commit   : bb65f3c1b25fa7a7e7afe6d4b2fd68c85dd880da    
  
author   : Michael Paquier <[email protected]>    
date     : Tue, 19 Sep 2023 08:31:26 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Tue, 19 Sep 2023 08:31:26 +0900    

Click here for diff

PLy_elog() was not able to handle correctly cases where a SPI called  
failed, which would fill in a DETAIL string able to trigger an  
assertion.  We may want to improve this infrastructure so as it is able  
to provide any extra detail information provided by an error stack, but  
this is left as a future improvement as it could impact existing error  
stacks and any applications that depend on them.  For now, the assertion  
is removed and a regression test is added to cover the case of a failure  
with a detail string.  
  
This problem exists since 2bd78eb8d51c, so backpatch all the way down  
with tweaks to the regression tests output added where required.  
  
Author: Alexander Lakhin  
Discussion: https://postgr.es/m/[email protected]  
Backpatch-through: 11  

M src/pl/plpython/expected/plpython_error.out
M src/pl/plpython/expected/plpython_error_5.out
M src/pl/plpython/plpy_elog.c
M src/pl/plpython/sql/plpython_error.sql

Don't crash if cursor_to_xmlschema is used on a non-data-returning Portal.

commit   : 9baabfa38e005699fc21d76875f03cc2f204258c    
  
author   : Tom Lane <[email protected]>    
date     : Mon, 18 Sep 2023 14:27:47 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Mon, 18 Sep 2023 14:27:47 -0400    

Click here for diff

cursor_to_xmlschema() assumed that any Portal must have a tupDesc,  
which is not so.  Add a defensive check.  
  
It's plausible that this mistake occurred because of the rather  
poorly chosen name of the lookup function SPI_cursor_find(),  
which in such cases is returning something that isn't very much  
like a cursor.  Add some documentation to try to forestall future  
errors of the same ilk.  
  
Report and patch by Boyu Yang (docs changes by me).  Back-patch  
to all supported branches.  
  
Discussion: https://postgr.es/m/dd343010-c637-434c-a8cb-418f53bda3b8.yangboyu.yby@alibaba-inc.com  

M doc/src/sgml/spi.sgml
M src/backend/utils/adt/xml.c

Track nesting depth correctly when drilling down into RECORD Vars.

commit   : ae13f8166dc372a94e596f423790a67abd7bf68c    
  
author   : Tom Lane <[email protected]>    
date     : Fri, 15 Sep 2023 17:01:26 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Fri, 15 Sep 2023 17:01:26 -0400    

Click here for diff

expandRecordVariable() failed to adjust the parse nesting structure  
correctly when recursing to inspect an outer-level Var.  This could  
result in assertion failures or core dumps in corner cases.  
  
Likewise, get_name_for_var_field() failed to adjust the deparse  
namespace stack correctly when recursing to inspect an outer-level  
Var.  In this case the likely result was a "bogus varno" error  
while deparsing a view.  
  
Per bug #18077 from Jingzhou Fu.  Back-patch to all supported  
branches.  
  
Richard Guo, with some adjustments by me  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/parser/parse_target.c
M src/backend/utils/adt/ruleutils.c
M src/test/regress/expected/rowtypes.out
M src/test/regress/sql/rowtypes.sql

Revert "Improve error message on snapshot import in snapmgr.c"

commit   : 1988f8766eeb297d7867e92bcfdea2e4ff894cc7    
  
author   : Michael Paquier <[email protected]>    
date     : Thu, 14 Sep 2023 16:00:41 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Thu, 14 Sep 2023 16:00:41 +0900    

Click here for diff

This reverts commit a0d87bcd9b57, following a remark from Andres Frend  
that the new error can be triggered with an incorrect SET TRANSACTION  
SNAPSHOT command without being really helpful for the user as it uses  
the internal file name.  
  
Discussion: https://postgr.es/m/[email protected]  
Backpatch-through: 11  

M src/backend/utils/time/snapmgr.c

Improve error message on snapshot import in snapmgr.c

commit   : a7b92d1c6807750723b668bc2bdde1c4698c9d64    
  
author   : Michael Paquier <[email protected]>    
date     : Thu, 14 Sep 2023 10:30:30 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Thu, 14 Sep 2023 10:30:30 +0900    

Click here for diff

When a snapshot file fails to be read in ImportSnapshot(), it would  
issue an ERROR as "invalid snapshot identifier" when opening a stream  
for it in read-only mode.  This error message is reworded to be the same  
as all the other messages used in this case on failure, which is useful  
when debugging this area.  
  
Thinko introduced by bb446b689b66 where snapshot imports have been  
added.  A backpatch down to 11 is done as this can improve any work  
related to snapshot imports in older branches.  
  
Author: Bharath Rupireddy  
Reviewed-by: Daniel Gustafsson  
Discussion: https://postgr.es/m/CALj2ACWmr=3KdxDkm8h7Zn1XxBoF6hdzq8WQyMn2y1OL5RYFrg@mail.gmail.com  
Backpatch-through: 11  

M src/backend/utils/time/snapmgr.c

Fix incorrect logic in plan dependency recording

commit   : 6341cb0b02ae16d7bbb8b4e7ebabf80c551a685e    
  
author   : David Rowley <[email protected]>    
date     : Thu, 14 Sep 2023 11:27:43 +1200    
  
committer: David Rowley <[email protected]>    
date     : Thu, 14 Sep 2023 11:27:43 +1200    

Click here for diff

Both 50e17ad28 and 29f45e299 mistakenly tried to record a plan dependency  
on a function but mistakenly inverted the OidIsValid test.  This meant  
that we'd record a dependency only when the function's Oid was  
InvalidOid.  Clearly this was meant to *not* record the dependency in  
that case.  
  
50e17ad28 made this mistake first, then in v15 29f45e299 copied the same  
mistake.  
  
Reported-by: Tom Lane  
Backpatch-through: 14, where 50e17ad28 first made this mistake  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/optimizer/plan/setrefs.c

Fix exception safety bug in typcache.c.

commit   : e2452c2a630a6952289816d9b241d227a38cb93d    
  
author   : Thomas Munro <[email protected]>    
date     : Wed, 13 Sep 2023 14:32:24 +1200    
  
committer: Thomas Munro <[email protected]>    
date     : Wed, 13 Sep 2023 14:32:24 +1200    

Click here for diff

If an out-of-memory error was thrown at an unfortunate time,  
ensure_record_cache_typmod_slot_exists() could leak memory and leave  
behind a global state that produced an infinite loop on the next call.  
  
Fix by merging RecordCacheArray and RecordIdentifierArray into a single  
array.  With only one allocation or re-allocation, there is no  
intermediate state.  
  
Back-patch to all supported releases.  
  
Reported-by: "James Pang (chaolpan)" <[email protected]>  
Reviewed-by: Michael Paquier <[email protected]>  
Discussion: https://postgr.es/m/PH0PR11MB519113E738814BDDA702EDADD6EFA%40PH0PR11MB5191.namprd11.prod.outlook.com  

M src/backend/utils/cache/typcache.c
M src/tools/pgindent/typedefs.list

Fix uninitialized access to InitialRunningXacts during decoding after ERROR.

commit   : f7d25117ba87af67e3d6c50a30d96883c802bc88    
  
author   : Amit Kapila <[email protected]>    
date     : Tue, 12 Sep 2023 10:12:51 +0530    
  
committer: Amit Kapila <[email protected]>    
date     : Tue, 12 Sep 2023 10:12:51 +0530    

Click here for diff

The transactions and subtransactions array that was allocated under  
snapshot builder memory context and recorded during decoding was not  
cleared in case of errors. This can result in an assertion failure if we  
attempt to retry logical decoding within the same session. To address this  
issue, we register a callback function under the snapshot builder memory  
context to clear the recorded transactions and subtransactions array along  
with the context.  
  
This problem doesn't exist in PG16 and HEAD as instead of using  
InitialRunningXacts, we added the list of transaction IDs and  
sub-transaction IDs, that have modified catalogs and are running during  
snapshot serialization, to the serialized snapshot (see commit 7f13ac8123).  
  
Author: Hou Zhijie  
Reviewed-by: Amit Kapila  
Backpatch-through: 11  
Discussion: http://postgr.es/m/[email protected]  

M src/backend/replication/logical/snapbuild.c

Make recovery report error message when invalid page header is found.

commit   : 2f13e8d9ec285e57775369a44fc4c47f7488f087    
  
author   : Fujii Masao <[email protected]>    
date     : Wed, 6 Oct 2021 00:16:03 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Wed, 6 Oct 2021 00:16:03 +0900    

Click here for diff

Commit 0668719801 changed XLogPageRead() so that it validated the page  
header, if invalid page header was found reset the error message and  
retried reading the page, to fix the scenario where streaming standby  
got stuck at a continuation record. This change hid the error message  
about invalid page header, which would make it harder for users to  
investigate what the actual issue was found in WAL.  
  
To fix the issue, this commit makes XLogPageRead() report the error  
message when invalid page header is found.  
  
When not in standby mode, an invalid page header should cause recovery  
to end, not retry reading the page, so XLogPageRead() doesn't need to  
validate the page header for the retry. Instead, ReadPageInternal() should  
be responsible for the validation in that case. Therefore this commit  
changes XLogPageRead() so that if not in standby mode it doesn't validate  
the page header for the retry.  
  
This commit has been originally pushed as of 68601985e699 for 15 and  
newer versions, but not to the older branches.  A recent investigation  
related to WAL replay failures has showed up that the lack of this patch  
in 12~14 is an issue, as we want to be able to improve the WAL reader to  
make a correct distinction between the end-of-wal and OOM cases when  
validating record headers.  REL_11_STABLE is left out as it will be  
EOL'd soon.  
  
Reported-by: Yugo Nagata  
Author: Yugo Nagata, Kyotaro Horiguchi  
Reviewed-by: Ranier Vilela, Fujii Masao  
Discussion: https://postgr.es/m/[email protected]  
Discussion: https://postgr.es/m/[email protected]  
Backpatch-through: 12  

M src/backend/access/transam/xlog.c

doc: remove mention of backslash doubling in strings

commit   : 43f062cac0a7352acf983b74638ecadb0bfd76ec    
  
author   : Bruce Momjian <[email protected]>    
date     : Fri, 8 Sep 2023 17:25:15 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Fri, 8 Sep 2023 17:25:15 -0400    

Click here for diff

Reported-by: Laurenz Albe  
  
Discussion: https://postgr.es/m/[email protected]  
  
Author: Laurenz Albe  
  
Backpatch-through: 11  

M doc/src/sgml/syntax.sgml

pg_basebackup: Generate valid temporary slot names under PQbackendPID()

commit   : 9de74ca706f64ff44bac7ba54209dd1a6eabdb45    
  
author   : Michael Paquier <[email protected]>    
date     : Thu, 7 Sep 2023 14:12:31 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Thu, 7 Sep 2023 14:12:31 +0900    

Click here for diff

pgbouncer can cause PQbackendPID() to return negative values due to it  
filling be_pid with random bytes (even these days pid_max can only be  
set up to 2^22 on 64b machines on Linux, for example, so this cannot  
happen with normal PID numbers).  When this happens, pg_basebackup may  
generate a temporary slot name that may not be accepted by the parser,  
leading to spurious failures, like:  
pg_basebackup: error: could not send replication command  
ERROR:  replication slot name "pg_basebackup_-1201966863" contains  
invalid character  
  
This commit fixes that problem by formatting the result from  
PQbackendPID() as an unsigned integer when creating the temporary  
replication slot name, so as the invalid character is gone and the  
command can be parsed.  
  
Author: Jelte Fennema  
Reviewed-by: Daniel Gustafsson, Nishant Sharma  
Discussion: https://postgr.es/m/CAGECzQQOGvYfp8ziF4fWQ_o8s2K7ppaoWBQnTmdakn3s-4Z=5g@mail.gmail.com  
Backpatch-through: 11  

M src/bin/pg_basebackup/pg_basebackup.c

doc: mention that to_char() values are rounded

commit   : a8e897e8beaf1a6c2d0bee0705fe1d2fffb3d338    
  
author   : Bruce Momjian <[email protected]>    
date     : Wed, 6 Sep 2023 16:52:24 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Wed, 6 Sep 2023 16:52:24 -0400    

Click here for diff

Reported-by: [email protected]  
  
Diagnosed-by: Laurenz Albe  
  
Discussion: https://postgr.es/m/[email protected]  
  
Author: Laurenz Albe  
  
Backpatch-through: 11  

M doc/src/sgml/func.sgml

doc: mention libpq regression tests

commit   : d46d69a359b594ff3d7d9fce0891d4d5e48a1f5e    
  
author   : Bruce Momjian <[email protected]>    
date     : Tue, 5 Sep 2023 13:05:27 -0400    
  
committer: Bruce Momjian <[email protected]>    
date     : Tue, 5 Sep 2023 13:05:27 -0400    

Click here for diff

Reported-by: Ryo Matsumura  
  
Discussion: https://postgr.es/m/TYCPR01MB11316B3FB56EE54D70BF0CEF6E8E4A@TYCPR01MB11316.jpnprd01.prod.outlook.com  
  
Backpatch-through: 11  

M doc/src/sgml/regress.sgml

Fix out-of-bound read in gtsvector_picksplit()

commit   : df11421d8242dd13b2b734d7f2ff65aff7619b85    
  
author   : Michael Paquier <[email protected]>    
date     : Mon, 4 Sep 2023 14:55:53 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Mon, 4 Sep 2023 14:55:53 +0900    

Click here for diff

This could lead to an imprecise choice when splitting an index page of a  
GiST index on a tsvector, deciding which entries should remain on the  
old page and which entries should move to a new page.  
  
This is wrong since tsearch2 has been moved into core with commit  
140d4ebcb46e, so backpatch all the way down.  This error has been  
spotted by valgrind.  
  
Author: Alexander Lakhin  
Discussion: https://postgr.es/m/[email protected]  
Backpatch-through: 11  

M src/backend/utils/adt/tsgistidx.c

postgres_fdw: Fix test for parameterized foreign scan.

commit   : b8f4644d60f5ce6c9ff28e9d76ab104818053379    
  
author   : Etsuro Fujita <[email protected]>    
date     : Wed, 30 Aug 2023 17:15:05 +0900    
  
committer: Etsuro Fujita <[email protected]>    
date     : Wed, 30 Aug 2023 17:15:05 +0900    

Click here for diff

Commit e4106b252 should have updated this test, but did not; back-patch  
to all supported branches.  
  
Reviewed by Richard Guo.  
  
Discussion: http://postgr.es/m/CAPmGK15nR0NXLSCKQAcqbZbTzrzd5MozowWnTnGfPkayndF43Q%40mail.gmail.com  

M contrib/postgres_fdw/expected/postgres_fdw.out
M contrib/postgres_fdw/sql/postgres_fdw.sql

Avoid possible overflow with ltsGetFreeBlock() in logtape.c

commit   : d2bd4ba30585e65e57004b65106c79235aef9a44    
  
author   : Michael Paquier <[email protected]>    
date     : Wed, 30 Aug 2023 08:03:52 +0900    
  
committer: Michael Paquier <[email protected]>    
date     : Wed, 30 Aug 2023 08:03:52 +0900    

Click here for diff

nFreeBlocks, defined as a long, stores the number of free blocks in a  
logical tape.  ltsGetFreeBlock() has been using an int to store the  
value of nFreeBlocks, which could lead to overflows on platforms where  
long and int are not the same size (in short everything except Windows  
where long is 4 bytes).  
  
The problematic intermediate variable is switched to be a long instead  
of an int.  
  
Issue introduced by c02fdc9223015, so backpatch down to 13.  
  
Author: Ranier vilela  
Reviewed-by: Peter Geoghegan, David Rowley  
Discussion: https://postgr.es/m/CAEudQApLDWCBR_xmwNjGBrDo+f+S4E87x3s7-+hoaKqYdtC4JQ@mail.gmail.com  
Backpatch-through: 13  

M src/backend/utils/sort/logtape.c

Initialize ListenSocket array earlier.

commit   : 3d895f95a0209969dddd7534747555ed8e3c1a79    
  
author   : Heikki Linnakangas <[email protected]>    
date     : Tue, 29 Aug 2023 09:09:40 +0300    
  
committer: Heikki Linnakangas <[email protected]>    
date     : Tue, 29 Aug 2023 09:09:40 +0300    

Click here for diff

After commit b0bea38705, syslogger prints 63 warnings about failing to  
close a listen socket at postmaster startup. That's because the  
syslogger process forks before the ListenSockets array is initialized,  
so ClosePostmasterPorts() calls "close(0)" 64 times. The first call  
succeeds, because fd 0 is stdin.  
  
This has been like this since commit 9a86f03b4e in version 13, which  
moved the SysLogger_Start() call to before initializing ListenSockets.  
We just didn't notice until commit b0bea38705 added the LOG message.  
  
Reported by Michael Paquier and Jeff Janes.  
  
Author: Michael Paquier  
Discussion: https://www.postgresql.org/message-id/ZOvvuQe0rdj2slA9%40paquier.xyz  
Discussion: https://www.postgresql.org/message-id/[email protected]#482670177eb4eaf4c9f03c1eed963e5f  
Backpatch-through: 13  

M src/backend/postmaster/postmaster.c

Avoid unnecessary plancache revalidation of utility statements.

commit   : 9b2a41db1cc007df304bf7874813e6ab78b9a830    
  
author   : Tom Lane <[email protected]>    
date     : Thu, 24 Aug 2023 12:02:40 -0400    
  
committer: Tom Lane <[email protected]>    
date     : Thu, 24 Aug 2023 12:02:40 -0400    

Click here for diff

Revalidation of a plancache entry (after a cache invalidation event)  
requires acquiring a snapshot.  Normally that is harmless, but not  
if the cached statement is one that needs to run without acquiring a  
snapshot.  We were already aware of that for TransactionStmts,  
but for some reason hadn't extrapolated to the other statements that  
PlannedStmtRequiresSnapshot() knows mustn't set a snapshot.  This can  
lead to unexpected failures of commands such as SET TRANSACTION  
ISOLATION LEVEL.  We can fix it in the same way, by excluding those  
command types from revalidation.  
  
However, we can do even better than that: there is no need to  
revalidate for any statement type for which parse analysis, rewrite,  
and plan steps do nothing interesting, which is nearly all utility  
commands.  To mechanize this, invent a parser function  
stmt_requires_parse_analysis() that tells whether parse analysis does  
anything beyond wrapping a CMD_UTILITY Query around the raw parse  
tree.  If that's what it does, then rewrite and plan will just  
skip the Query, so that it is not possible for the same raw parse  
tree to produce a different plan tree after cache invalidation.  
  
stmt_requires_parse_analysis() is basically equivalent to the  
existing function analyze_requires_snapshot(), except that for  
obscure reasons that function omits ReturnStmt and CallStmt.  
It is unclear whether those were oversights or intentional.  
I have not been able to demonstrate a bug from not acquiring a  
snapshot while analyzing these commands, but at best it seems mighty  
fragile.  It seems safer to acquire a snapshot for parse analysis of  
these commands too, which allows making stmt_requires_parse_analysis  
and analyze_requires_snapshot equivalent.  
  
In passing this fixes a second bug, which is that ResetPlanCache  
would exclude ReturnStmts and CallStmts from revalidation.  
That's surely *not* safe, since they contain parsable expressions.  
  
Per bug #18059 from Pavel Kulakov.  Back-patch to all supported  
branches.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/parser/analyze.c
M src/backend/utils/cache/plancache.c
M src/include/parser/analyze.h
M src/pl/plpgsql/src/expected/plpgsql_call.out
M src/pl/plpgsql/src/sql/plpgsql_call.sql

doc: Replace list of drivers and PLs with wiki link

commit   : 832be40c4912703d41317f853e7f552b4b0708ec    
  
author   : Daniel Gustafsson <[email protected]>    
date     : Wed, 23 Aug 2023 14:13:07 +0200    
  
committer: Daniel Gustafsson <[email protected]>    
date     : Wed, 23 Aug 2023 14:13:07 +0200    

Click here for diff

The list of external language drivers and procedural languages was  
never complete or exhaustive, and rather than attempting to manage  
it the content has migrated to the wiki.  This replaces the tables  
altogether with links to the wiki as we regularly get requests for  
adding various projects,  which we reject without any clear policy  
for why or how the content should be managed.  
  
The threads linked to below are the most recent discussions about  
this, the archives contain many more.  
  
Backpatch to all supported branches since the list on the wiki  
applies to all branches.  
  
Author: Jonathan Katz <[email protected]>  
Discussion: https://postgr.es/m/[email protected]  
Discussion: https://postgr.es/m/[email protected]  
Backpatch-through: v11  

M doc/src/sgml/external-projects.sgml

Cache by-reference missing values in a long lived context

commit   : 7f4515a58ebd0ae967638b0a27c730cbd49b3455    
  
author   : Andrew Dunstan <[email protected]>    
date     : Tue, 22 Aug 2023 11:57:08 -0400    
  
committer: Andrew Dunstan <[email protected]>    
date     : Tue, 22 Aug 2023 11:57:08 -0400    

Click here for diff

Attribute missing values might be needed past the lifetime of the tuple  
descriptors from which they are extracted. To avoid possibly using  
pointers for by-reference values which might thus be left dangling, we  
cache a datumCopy'd version of the datum in the TopMemoryContext. Since  
we first search for the value this only needs to be done once per  
session for any such value.  
  
Original complaint from Tom Lane, idea for mitigation by Andrew Dunstan,  
tweaked by Tom Lane.  
  
Backpatch to version 11 where missing values were introduced.  
  
Discussion: https://postgr.es/m/[email protected]  

M src/backend/access/common/heaptuple.c
M src/tools/pgindent/typedefs.list

Remove test from commit fa2e874946.

commit   : 5a32af3f2c6106080da72e78a42c8fc3ab0584a1    
  
author   : Jeff Davis <[email protected]>    
date     : Thu, 10 Aug 2023 10:16:59 -0700    
  
committer: Jeff Davis <[email protected]>    
date     : Thu, 10 Aug 2023 10:16:59 -0700    

Click here for diff

The fix itself is fine, but the test revealed other problems related  
to parallel query that are not easily fixable. Remove the test for  
now to fix the buildfarm.  
  
Discussion: https://postgr.es/m/[email protected]  
Backpatch-through: 11  

D src/test/isolation/expected/search-path-inval.out
M src/test/isolation/isolation_schedule
D src/test/isolation/specs/search-path-inval.spec

Recalculate search_path after ALTER ROLE.

commit   : 00953f1e232912a21bb17b3ad486e6ef8c5eadab    
  
author   : Jeff Davis <[email protected]>    
date     : Mon, 7 Aug 2023 15:12:33 -0700    
  
committer: Jeff Davis <[email protected]>    
date     : Mon, 7 Aug 2023 15:12:33 -0700    

Click here for diff

Renaming a role can affect the meaning of the special string $user, so  
must cause search_path to be recalculated.  
  
Discussion: https://postgr.es/m/[email protected]  
Reviewed-by: Nathan Bossart, Michael Paquier  
Backpatch-through: 11  

M src/backend/catalog/namespace.c
A src/test/isolation/expected/search-path-inval.out
M src/test/isolation/isolation_schedule
A src/test/isolation/specs/search-path-inval.spec