Release date: 2024-02-08
This release contains a variety of fixes from 12.17. For information about new features in major release 12, see Section E.21.
The PostgreSQL community will stop releasing updates for the 12.X release series in November 2024. Users are encouraged to update to a newer release branch soon.
A dump/restore is not required for those running 12.X.
However, one bug was fixed that could have resulted in corruption of GIN indexes during concurrent updates. If you suspect such corruption, reindex affected indexes after installing this update.
Also, if you are upgrading from a version earlier than 12.17, see Section E.4.
Tighten security restrictions within REFRESH MATERIALIZED
VIEW CONCURRENTLY
(Heikki Linnakangas)
One step of a concurrent refresh command was run under weak security
restrictions. If a materialized view's owner could persuade a
superuser or other high-privileged user to perform a concurrent
refresh on that view, the view's owner could control code executed
with the privileges of the user running REFRESH
.
Fix things so that all user-determined code is run as the view's
owner, as expected.
The only known exploit for this error does not work in PostgreSQL 16.0 and later, so it may be that v16 is not vulnerable in practice.
The PostgreSQL Project thanks Pedro Gallegos for reporting this problem. (CVE-2024-0985)
Fix memory leak when performing JIT inlining (Andres Freund, Daniel Gustafsson)
There have been multiple reports of backend processes suffering out-of-memory conditions after sufficiently many JIT compilations. This fix should resolve that.
When dequeueing from an LWLock, avoid needing to search the list of waiting processes (Andres Freund)
This fixes O(N^2) behavior when the list of waiters is long. In some use-cases this results in substantial throughput improvements.
Avoid generating incorrect partitioned-join plans (Richard Guo)
Some uncommon situations involving lateral references could create incorrect plans. Affected queries could produce wrong answers, or odd failures such as “variable not found in subplan target list”, or executor crashes.
Fix incorrect wrapping of subquery output expressions in PlaceHolderVars (Tom Lane)
This fixes incorrect results when a subquery is underneath an outer join and has an output column that laterally references something outside the outer join's scope. The output column might not appear as NULL when it should do so due to the action of the outer join.
Avoid requesting an oversize shared-memory area in parallel hash join (Thomas Munro, Andrei Lepikhov, Alexander Korotkov)
The limiting value was too large, allowing “invalid DSA memory alloc request size” errors to occur with sufficiently large expected hash table sizes.
Avoid assertion failures in heap_update()
and heap_delete()
when a tuple to be updated by
a foreign-key enforcement trigger fails the extra visibility
crosscheck (Alexander Lakhin)
This error had no impact in non-assert builds.
Fix possible failure during ALTER TABLE ADD
COLUMN
on a complex inheritance tree (Tender Wang)
If a grandchild table would inherit the new column via multiple intermediate parents, the command failed with “tuple already updated by self”.
Fix problems with duplicate token names in ALTER TEXT
SEARCH CONFIGURATION ... MAPPING
commands (Tender Wang,
Michael Paquier)
Properly lock the associated table during DROP
STATISTICS
(Tomas Vondra)
Failure to acquire the lock could result in “tuple
concurrently deleted” errors if the DROP
executes concurrently with ANALYZE
.
Fix function volatility checking for GENERATED
and DEFAULT
expressions (Tom Lane)
These places could fail to detect insertion of a volatile function
default-argument expression, or decide that a polymorphic function
is volatile although it is actually immutable on the datatype of
interest. This could lead to improperly rejecting or accepting
a GENERATED
clause, or to mistakenly applying the
constant-default-value optimization in ALTER TABLE ADD
COLUMN
.
Detect that a new catalog cache entry became stale while detoasting its fields (Tom Lane)
We expand any out-of-line fields in a catalog tuple before inserting it into the catalog caches. That involves database access which might cause invalidation of catalog cache entries — but the new entry isn't in the cache yet, so we would miss noticing that it should get invalidated. The result is a race condition in which an already-stale cache entry could get made, and then persist indefinitely. This would lead to hard-to-predict misbehavior. Fix by rechecking the tuple's visibility after detoasting.
Fix edge-case integer overflow detection bug on some platforms (Dean Rasheed)
Computing 0 - INT64_MIN
should result in an
overflow error, and did on most platforms. However, platforms with
neither integer overflow builtins nor 128-bit integers would fail to
spot the overflow, instead returning INT64_MIN
.
Detect Julian-date overflow when adding or subtracting
an interval
to/from a timestamp
(Tom Lane)
Some cases that should cause an out-of-range error produced an incorrect result instead.
Add more checks for overflow in interval_mul()
and interval_div()
(Dean Rasheed)
Some cases that should cause an out-of-range error produced an incorrect result instead.
Make the pg_file_settings
view check
validity of unapplied values for settings
with backend
or superuser-backend
context (Tom Lane)
Invalid values were not noted in the view as intended. This escaped detection because there are very few settings in these groups.
Match collation too when matching an existing index to a new partitioned index (Peter Eisentraut)
Previously we could accept an index that has a different collation from the corresponding element of the partition key, possibly leading to misbehavior.
Fix insufficient locking when cleaning up an incomplete split of a GIN index's internal page (Fei Changhong, Heikki Linnakangas)
The code tried to do this with shared rather than exclusive lock on the buffer. This could lead to index corruption if two processes attempted the cleanup concurrently.
Avoid premature release of buffer pin in GIN index insertion (Tom Lane)
If an index root page split occurs concurrently with our own insertion, the code could fail with “buffer NNNN is not owned by resource owner”.
Avoid failure with partitioned SP-GiST indexes (Tom Lane)
Trying to use an index of this kind could lead to “No such file or directory” errors.
Fix ownership change reporting for large objects (Tom Lane)
A no-op ALTER LARGE OBJECT OWNER
command (that
is, one selecting the existing owner) passed the wrong class ID to
the PostAlterHook
, probably confusing any
extension using that hook.
Prevent standby servers from incorrectly processing dead index tuples during subtransactions (Fei Changhong)
The startedInRecovery
flag was not
correctly set for a subtransaction. This affects only processing of
dead index tuples. It could allow a query in a subtransaction to
ignore index entries that it should return (if they are already dead
on the primary server, but not dead to the standby transaction), or
to prematurely mark index entries as dead that are not yet dead on
the primary. It is not clear that the latter case has any serious
consequences, but it's not the intended behavior.
Fix deadlock between a logical replication apply worker, its tablesync worker, and a session process trying to alter the subscription (Shlok Kyal)
One edge of the deadlock loop did not involve a lock wait, so the deadlock went undetected and would persist until manual intervention.
Return the correct status code when a new client disconnects without responding to the server's password challenge (Liu Lang, Tom Lane)
In some cases we'd treat this as a loggable error, which was not the
intention and tends to create log spam, since common clients
like psql frequently do this. It may
also confuse extensions that
use ClientAuthentication_hook
.
Fix incompatibility with OpenSSL 3.2 (Tristan Partin, Bo Andreson)
Use the BIO “app_data” field for our private storage, instead of assuming it's okay to use the “data” field. This mistake didn't cause problems before, but with 3.2 it leads to crashes and complaints about double frees.
Be more wary about OpenSSL not
setting errno
on error (Tom Lane)
If errno
isn't set, assume the cause of the
reported failure is read EOF. This fixes rare cases of strange
error reports like “could not accept SSL connection:
Success”.
Report ENOMEM errors from file-related system
calls as ERRCODE_OUT_OF_MEMORY
,
not ERRCODE_INTERNAL_ERROR
(Alexander Kuzmenkov)
Avoid race condition when libpq initializes OpenSSL support concurrently in two different threads (Willi Mann, Michael Paquier)
Fix timing-dependent failure in GSSAPI data transmission (Tom Lane)
When using GSSAPI encryption in non-blocking mode, libpq sometimes failed with “GSSAPI caller failed to retransmit all data needing to be retried”.
In pg_dump, don't dump RLS policies or security labels for extension member objects (Tom Lane, Jacob Champion)
Previously, commands would be included in the dump to set these properties, which is really incorrect since they should be considered as internal affairs of the extension. Moreover, the restoring user might not have adequate privilege to set them, and indeed the dumping user might not have enough privilege to dump them (since dumping RLS policies requires acquiring lock on their table).
In pg_dump, don't dump an extended statistics object if its underlying table isn't being dumped (Rian McGuire, Tom Lane)
This conforms to the behavior for other dependent objects such as indexes.
Fix crash in contrib/intarray
if an array with
an element equal to INT_MAX
is inserted into
a gist__int_ops
index
(Alexander Lakhin, Tom Lane)
Report a better error
when contrib/pageinspect
's
hash_bitmap_info()
function is applied to a
partitioned hash index (Alexander Lakhin, Michael Paquier)
Report a better error
when contrib/pgstattuple
's
pgstathashindex()
function is applied to a
partitioned hash index (Alexander Lakhin)
On Windows, suppress autorun options when launching subprocesses in pg_ctl and pg_regress (Kyotaro Horiguchi)
When launching a child process via cmd.exe
,
pass the /D
flag to prevent executing any autorun
commands specified in the registry. This avoids possibly-surprising
side effects.
Fix compilation failures with libxml2 version 2.12.0 and later (Tom Lane)
Suppress compiler warnings from Python's header files (Peter Eisentraut, Tom Lane)
Our preferred compiler options provoke warnings about constructs appearing in recent versions of Python's header files. When using gcc, we can suppress these warnings with a pragma.
Avoid deprecation warning when compiling with LLVM 18 (Thomas Munro)
Update time zone data files to tzdata release 2024a for DST law changes in Greenland, Kazakhstan, and Palestine, plus corrections for the Antarctic stations Casey and Vostok. Also historical corrections for Vietnam, Toronto, and Miquelon.