diff --git a/doc/src/sgml/release-18.sgml b/doc/src/sgml/release-18.sgml index 222d884831b..e2e3cf237f2 100644 --- a/doc/src/sgml/release-18.sgml +++ b/doc/src/sgml/release-18.sgml @@ -1,6 +1,2652 @@ + + Release 18.5 + + + Release date: + 2026-08-13 + + + + This release contains a variety of fixes from 18.4. + For information about new features in major release 18, see + . + + + + Migration to Version 18.5 + + + A dump/restore is not required for those running 18.X. + + + + However, if you have any GIN indexes, see the changelog entry below + about possibly-corrupt reltuples values for + their tables. + + + + Also, if you use contrib/btree_gist + or contrib/ltree, you may need to reindex indexes + made with those extensions; see the relevant entries below. + + + + Also, if you are upgrading from a version earlier than 18.2, + see . + + + + + Changes + + + + + + + Ensure that parallel GIN index builds update the table's + pg_class.reltuples + value correctly (Jan Nidzwetzki, Tomas Vondra) + § + + + + A parallel worker could report an uninitialized value for the + number of rows it processed, leading to a bogus value + for reltuples, even Infinity or NaN. + Such values could lead to subsequent autovacuum and autoanalyze + operations never deciding that the table needs to be processed. + If so, the situation will not self-heal. A manual + ANALYZE command, or creation of another index, + will be needed to reset reltuples to + the correct value. If you have any tables with GIN indexes, it's + recommended to check to see if + their reltuples entries look sane. + A query such as this may be helpful: + +SELECT DISTINCT t.oid::regclass, t.reltuples +FROM pg_class t + JOIN pg_index i ON t.oid = i.indrelid + JOIN pg_class ic ON i.indexrelid = ic.oid +WHERE t.relhasindex AND ic.relam = 2742; + + + + + + + + Fix self-deadlock when replaying WAL generated by an older minor + version (Andrey Borodin) + + + + This error was introduced in the previous set of minor releases. It + caused standby servers that were following a primary of an older + minor release version to get stuck in some scenarios. + + + + + + + Fix mis-handling of asynchronous reads when rescanning an + asynchronous Append plan node (Alexander Korotkov, Gleb Kashkin, + Etsuro Fujita) + § + + + + When an upper plan node rescans an Append before having read the + entire Append output, we need to discard any in-flight requests sent + to external servers (by postgres_fdw for + example). This was not done correctly in cases where a subplan has + parameter changes or is discarded by partition pruning in the next + scan. The outcome could be incorrect query results, an infinite + loop, or an assertion failure. + + + + + + + Fix error in partition pruning for RANGE-partitioned tables + (David Rowley) + § + + + + In some cases the DEFAULT partition would be skipped when it should + not be, which could lead to rows missing from query results. + + + + + + + Correctly update foreign-data-wrapper state in a ModifyTable plan + node after pruning result relations (Ayush Tiwari, Rafia Sabih) + § + § + + + + Previously, if run-time partition pruning determined that some + partitions of a partitioned target table need not be scanned + and the table had any foreign-table partitions, a crash + or erroneous behavior was likely. + + + + + + + Fix missed concurrent update in UPDATE + with RETURNING OLD on a table that has + a BEFORE UPDATE trigger (Dean Rasheed) + § + + + + If the target row was concurrently updated, then at isolation + level READ COMMITTED any OLD + values in RETURNING should reflect the updated + row. But stale values were returned if there was a trigger + (although the trigger itself, and the final output row, saw the + correct values). + + + + + + + Fix hash join performance issue when there are multiple join keys + and many NULL values (David Rowley) + § + + + + Null-keyed tuples should not get inserted into the hash table, since + they will never match any other tuples. The code got this wrong if + the null was in a non-last join column, bloating the hash table + quite a lot if many inputs contain nulls. + + + + + + + Fix parsing of + parenthesized OLD/NEW + in RETURNING expressions (Marko Grujic) + § + + + + Expressions such as (old).colname + and (old).* were mis-handled, effectively + converting them to NEW references. + + + + + + + Fix planner's nullability and strictness checks + for value IN + (array) expressions + (Ayush Tiwari) + § + + + + These checks should only succeed if the array operand is known to be + non-empty, but that consideration was missed, allowing optimizations + to be applied that should not be. This could result in wrong query + answers if the array actually was empty. + + + + + + + Fix incorrect join removal logic (Matheus Alcantara, Richard Guo) + § + § + + + + In edge cases, it was possible for a constant output value coming + from within the nullable side of an outer join to not be replaced by + NULL when it should be. + + + + + + + Clean up PlaceHolderVars more thoroughly during join removal + (Richard Guo, Arne Roland) + § + § + + + + This fix corrects various edge cases that could trip assertions or + result in incorrect plans. + + + + + + + Add missed checks for hashability of equality comparisons on + container datatypes (arrays, composites, ranges) (Andrei Lepikhov, + Tom Lane) + § + + + + The planner must verify hashability of the container's component + type(s) before deciding it can use a hash-based plan type. This + step was missed in some places, leading to could not identify + a hash function failures at execution. + + + + + + + Avoid pushing WHERE clauses down past a grouping + step that has a different equivalence rule (Richard Guo) + § + + + + A test on a grouping column that is grouped by a nondeterministic + collation is safe to push down only if it is a comparison using that + same collation. Otherwise it might filter some rows the grouping + would have merged. + + + + + + + Fix mis-optimization of COUNT window functions + that have an EXCLUDE clause or + lack ORDER BY (Chengpeng Yan, David Rowley) + § + + + + These window functions were treated as monotonic when they should + not be, allowing wrong answers to be computed. + + + + + + + Avoid cache lookup failed for collation 0 error when + planner looks up statistics for a column of type "char" + (Feng Wu) + § + + + + + + + Fix ALTER COLUMN ... DROP EXPRESSION to work when + there are multiple levels of partitions (Alberto Piai) + § + + + + + + + Fix attaching partitions of indexes that are exclusion constraints + (Japin Li) + § + + + + Notably, this oversight broke dump/restore of partitioned exclusion + constraints. + + + + + + + Prevent setting NO INHERIT on + partitioned NOT NULL constraints + via ALTER CONSTRAINT (Andreas Karlsson) + § + + + + NOT NULL constraints on partitioned tables are + supposed to be inherited by all partitions, and therefore must not + be marked NO INHERIT. This rule was correctly + enforced by constraint creation, but not by ALTER TABLE + ... ALTER CONSTRAINT. + + + + + + + Disallow renaming a rule to _RETURN (Tom Lane) + § + + + + That name is reserved for a view's ON SELECT + rule, but ALTER RULE allowed renaming other rules + to _RETURN, causing trouble later. + + + + + + + Fix missing lock release for role membership grants in DROP + OWNED BY (Jeff Davis) + § + + + + This oversight resulted in a warning message, followed by retaining + a lock on the membership grant until the end of the transaction. + + + + + + + Fix failure of EXPLAIN when + deparsing SQL/JSON aggregates (Richard Guo) + § + + + + Some plan structures resulted in invalid + JsonConstructorExpr underlying node type errors. + + + + + + + Fix use of REINDEX CONCURRENTLY with + a deferred uniqueness constraint (Nitin Motiani) + § + + + + The transient index copy created during REINDEX + CONCURRENTLY was incorrectly marked as enforcing immediate + uniqueness, causing spurious reports of constraint violation. + + + + + + + Fix LIKE matching with nondeterministic + collations and backslashes (Nitin Motiani, Tom Lane) + § + § + + + + When using a nondeterministic collation, LIKE + mishandled an escaped backslash (\\), treating it + as effectively not there. It also did the wrong thing with a + leading backslash preceding an ordinary character; in that case the + backslash should be effectively ignored, but it caused the ordinary + character to be matched exactly rather than allowing the + nondeterministic collation to decide if there's a match. + + + + + + + Fix LIKE/regex optimization for indexscan with + exact-match pattern (Jelte Fennema-Nio) + § + + + + Refactoring for LIKE with non-deterministic + collations accidentally broke the optimization for converting + a LIKE or regex exact-match pattern to an + equality index condition when the index collation doesn't match + the expression collation. Among other things, that + made psql's + \d tablename + command much slower. + + + + + + + Fix matching of localized month/day names + in to_date() (Heikki Linnakangas) + § + + + + The matching logic misbehaved in cases where case-folding changes + the byte length of the string. + + + + + + + Correct case-folding rules for Greek final sigma (Jeff Davis) + § + + + + If the string is preceded only by Case Ignorable characters, don't + consider it to be a final sigma. This only affects the + built-in pg_unicode_fast locale. + + + + + + + Fix incorrect NFC recomposition for Hangul U+11A7 (TBASE) + (Diego Frias, Michael Paquier) + § + + + + This character was treated as a valid T syllable, which it is not, + and hence silently swallowed during normalization. + + + + + + + Avoid possible truncation of output lexemes in case-insensitive + synonym dictionaries (Jeff Davis) + § + + + + If folding to lower case increased the byte length of a lexeme, it + was incorrectly truncated to its original byte length when emitted. + + + + + + + Defend against truncated UTF-8 characters in case-conversion logic + (Jeff Davis) + § + + + + + + + Fix typo in hash_record_extended() (Man Zeng) + § + + + + The code failed to initialize the second isnull argument passed to + FunctionCallInvoke(). This is harmless for existing in-core + extended hash support functions, which will not examine that value. + However, extension-provided hash functions could be affected if they + inspect PG_ARGISNULL(1). + + + + + + + Fix pg_get_publication_tables() to not fail if + a publishable table is dropped concurrently (Bharath Rupireddy) + § + + + + + + + Prevent satisfies_hash_partition() from + crashing with VARIADIC NULL (Robert Haas) + § + + + + + + + Report invalid-weight errors more cleanly and consistently + in tsvector_filter() and allied functions + (Ewan Young) + § + + + + In particular, report weight characters that are not printable ASCII + in octal form (\nnn), + as charout() would render them. This avoids + possibly producing an invalidly-encoded error message. + + + + + + + Reject out-of-range timestamp shift values + in uuidv7() (Baji Shaik) + § + + + + The shift value must not be so large as to produce a timestamp out + of the range that a v7 UUID can represent. Previously, a garbage + UUID value was produced. + + + + + + + Fix mishandling of namespace nodes in xpath() + (Michael Paquier) + § + § + + + + This fix avoids an unexpected could not copy node + error. + + + + + + + Fix jsonpath's .decimal method to + not throw a hard error for incorrect precision or scale (Ewan Young) + § + § + + + + Silent mode should suppress these errors, but failed to. + + + + + + + Treat an undefined jsonpath variable as an error even when no + variables are supplied (Andrey Rachitskiy) + + + + The jsonb @? + and @@ operators cannot supply any variables to + be used in their jsonpath expressions. This code path erroneously + treated an unknown jsonpath variable as a JSON null, rather than + raising an error as expected. Aside from not being the expected + behavior, this mistake could result in unbounded memory consumption. + + + + + + + Fix NULL-pointer crash when IS JSON or similar + constructs have an argument that is of string category but lacks a + cast to type text (Ayush Tiwari) + § + + + + There are no such data types in + core PostgreSQL, but the problem is + reachable with some extension types. + + + + + + + Ensure that SQL/JSON ON EMPTY / ON ERROR + DEFAULT values are coerced to the correct typmod (Ewan Young) + § + + + + For example, the declared precision and scale of + a numeric target column were not applied to the default + value. + + + + + + + Avoid machine-dependent behavior when dividing the smallest + possible money value by -1 (Andrey Rachitskiy) + § + + + + + + + Fix crash after out-of-memory failure partway through creation of a + cache entry for a text search dictionary (Tom Lane) + § + + + + + + + Fix memory-safety bugs in processing of incorrect ispell/hunspell + dictionary files (Andrey Rachitskiy) + § + + + + + + + Prevent access to other sessions' temporary tables (Jim Jones, + Daniil Davydov, Alexander Korotkov) + § + § + + + + Some code paths failed to prevent this, leading to silently wrong + (inconsistent) results. + + + + + + + Prevent no empty local buffer available errors during + temporary table access (Melanie Plageman) + § + + + + Limit the number of local buffers that the read streaming mechanism + is allowed to use. Previously, a large value + of effective_io_concurrency could allow a single + stream to use all the buffers, resulting in failure. + + + + + + + Fix the order in which autovacuum processes databases + (Rustam Khamidullin) + § + + + + It was unintentionally processing databases from lowest to highest + score, when it should be doing the reverse. + + + + + + + Restore full use of shared buffer pool + in VACUUM's wraparound failsafe mode + (Melanie Plageman) + § + § + + + + An ordinary VACUUM is limited to use just a few + shared buffers, so as not to impinge too much on other processing. + However, in failsafe mode we want to reclaim transaction IDs as + quickly as possible, so that limit is supposed to be abandoned + to allow vacuuming to proceed as fast as possible. This behavior + was accidentally broken during refactoring in v18; restore it. + + + + + + + Fix memory leak in parallel vacuum worker processes (Baji Shaik) + § + + + + Progress reports from a parallel worker leaked about 1kB per report, + with the waste accumulating for the life of the worker process. + + + + + + + Honor query cancel and vacuum delay during GIN index posting-tree + cleanup (Paul Kim, Alexander Korotkov) + § + + + + The posting tree for a common value can be large, so that this + missed check could allow vacuum to run for a long time before + noticing an interrupt. + + + + + + + Fix possible mis-decoding of index tuples during GiST and SP-GiST + index-only scans (Peter Geoghegan) + § + + + + This error could lead to emitting corrupted data from an index-only + scan plan. The only affected core opclass is GiST's range_ops, and + it could only fail if the range column were not the first index + column. + + + + + + + Ensure that the new last block of a bulk-extended table is added to + its free space map promptly (Jingtang Zhang) + § + + + + An off-by-one error caused the last block of a multi-block table + extension to not be marked as free in the map. This would + eventually get corrected by vacuum, but meanwhile the space wouldn't + be used. + + + + + + + Avoid possible double-free or infinite error recovery loop in + resource cleanup during transaction abort (Tom Lane) + § + + + + + + + When creating directories, tolerate concurrent creation of the same + directory (Andrew Dunstan, Tom Lane) + § + + + + + + + Fix JIT-compiled tuple deconstruction code to account correctly for + virtual generated columns (David Rowley) + § + + + + + + + Prevent creation of dangling object dependencies by acquiring a + shared lock on any object being depended on (Bertrand Drouvot) + § + § + + + + The shared lock will conflict with any attempt to drop the + depended-on object, eliminating the race condition that formerly + existed. For example, if one session drops a schema (that appears + empty to it) concurrently with some other session creating a + function in that schema, previously both transactions could commit, + leaving an invalid function definition behind. Now, one transaction + or the other will fail. + + + + + + + Fix race condition in conflict detection + for SERIALIZABLE isolation mode + (Peter Geoghegan) + § + + + + A conflict could be missed when examining an initially-empty btree + index, allowing failure of serializability due to improperly + allowing conflicting transactions to commit. + + + + + + + Fix race condition in ProcSignalBarrier code (Masahiko Sawada) + § + + + + This error could result in processes getting stuck, typically after + reporting still waiting for backend with + PID nnnn to accept + ProcSignalBarrier. + + + + + + + Fix race conditions when a set of processes that belong to the same + lock group exit at the same time (Vlad Lesin) + § + § + + + + These errors could lead to PANIC aborts, with messages such + as latch already owned. The issue does not normally + arise in regular parallel query, since the leader won't exit before + seeing its workers finish; but some extensions reach the problem. + + + + + + + Fix WAL logging of operations that clear bits in tables' visibility + maps (Melanie Plageman, Andres Freund) + § + § + § + + + + Such VM changes were missed by the WAL summarizer, potentially + leading to incorrect incremental backups. We also failed to log + full-page images of such VM pages when needed, potentially allowing + torn page writes to go uncorrected. This could lead to misbehavior + later, such as wrong results from index-only scans. + + + + + + + Prevent WAL summarizer process from getting stuck at a timeline + switch (Robert Haas) + § + § + + + + + + + Fix race with timeline selection in logical decoding during standby + promotion (Bertrand Drouvot) + § + § + + + + Logical decoding being performed on the standby could fail with + a requested WAL segment has already been removed + error. A repeat attempt would succeed, so there was no permanent + problem but there was an availability hazard. + + + + + + + Avoid exposing a WAL receiver's full connection string during timeline + jumps (Chao Li) + § + + + + The pg_stat_wal_receiver view should show a + sanitized version of the connection string, without sensitive data. + But it transiently showed the full string when we re-use an existing + WAL receiver. + + + + + + + Use run-time checks, not just Asserts, to verify the correct number + of columns in tuples received during logical replication (Varik + Matevosyan) + § + + + + A malicious or buggy publisher could send inconsistent numbers of + columns. While we could not find a scenario in which this would + have serious ill effects, extra caution seems warranted. + + + + + + + Clean up quoting of string parameters within constructed replication + commands (Tom Lane) + § + + + + Various places that generate replication commands were not being + adequately careful about quoting replication slot names and other + parameters that need to be inserted into those commands. This could + result in unexpected syntax errors in those commands. In principle, + a crafted replication slot name could result in SQL injection; but + such a scenario seems very unlikely to occur in practice, since + replication operations can only be invoked by highly-privileged + users and there is no reason for them to use a slot name coming from + an untrustworthy source. + + + + + + + Fix logical decoding of empty prepared transactions (Masahiko Sawada) + § + + + + A prepared transaction that did not cause any decodable updates could + result in sending COMMIT/ROLLBACK PREPARED to the + output plugin with no preceding PREPARE. For the + built-in subscriber this breaks replication, and other plugins will + probably not like it either. + + + + + + + Fix corruption of unlogged sequences after standby promotion + (Fujii Masao) + § + + + + Previously, if an unlogged sequence was created on the primary and + replicated to a standby, accessing the sequence after promoting the + standby could fail with bad magic number in sequence + or related errors. + + + + + + + Fix cascading standby reconnect failure after archive fallback + (Marco Nenciarini) + § + + + + A cascading standby could fail to reconnect to its upstream standby + with requested starting point ... is ahead of the WAL flush + position after falling back to archive recovery. + + + + + + + Prevent accepting hot-standby connections before WAL replay has + reached a consistent database state (Nikhil Sontakke) + § + + + + + + + Do not try to clear + pg_database.dathasloginevt + locally on a standby server (Ayush Tiwari) + § + + + + Event trigger cleanup tried to perform that action on standby + servers as well as the primary. That can't work on a standby, + and there's no need anyway since replay of the primary's database + change will soon fix it. + + + + + + + Avoid race condition while dropping obsolete replication slots + (Xuneng Zhou) + § + + + + An incorrect unlock and log message could occur if another session + immediately re-used the dropped slot's shared-memory entry. + + + + + + + Avoid race condition while dropping ephemeral replication slots + (Zhijie Hou) + § + + + + The slot-releasing code performed some additional updates to the + replication slot's shared-memory entry after releasing the slot. + This is unsafe since another session could immediately re-use the + dropped slot's shared-memory entry. Skip those updates in the case + of an ephemeral slot. + + + + + + + Fix stale progress reports during logical replication table + synchronization (Shinya Kato) + § + + + + Previously, the pg_stat_progress_copy view + in the subscriber would continue to show the + initial COPY operation as active even after the + data copy had finished. The stale entry remained visible until + synchronization caught up with the publisher. + + + + + + + Clear base backup progress on backup failure (Chao Li) + § + § + + + + Previously the pg_stat_progress_basebackup + view would continue to show a stale progress entry after a failure, + until the replication client + disconnected. pg_basebackup normally + disconnects immediately, but other clients might not. + + + + + + + Fix possible PANIC due to concurrent drop of pgstats entries + when track_functions is enabled (Sami Imseih, + Michael Paquier) + § + § + § + + + + + + + Clean up broken local pgstats entry after failing to obtain space for + the corresponding shared hashtable entry (Niall Newman) + § + + + + Failure to do this led to a null-pointer dereference the next time + the local entry was used. + + + + + + + Avoid recording incorrect I/O operation statistics after a failed + read or write (Bertrand Drouvot) + § + + + + + + + In PL/Perl, avoid NULL pointer + dereference crash when working with an + invalid PostgreSQL::InServer::ARRAY object (Xing Guo) + § + + + + + + + In PL/Python, properly check for errors + when working with sequence and mapping objects (Richard Guo) + § + + + + Previously, a broken object or an unhandled exception could result + in a NULL pointer dereference crash. + + + + + + + In libpq, always drain all pending bytes + from the SSL or GSS decryption buffer + during pqReadData() (Jacob Champion) + § + § + § + § + + + + This avoids edge cases where libpq or its + calling application waits for more data to arrive on the socket, but + actually all the data has already arrived. + + + + + + + Improve libpq's handling of out-of-memory + conditions (Anthonin Bonnefoy) + § + + + + + + + Fix libpq's trace facility to print + new-style BackendKeyData and CancelRequest messages correctly + (Anthonin Bonnefoy) + § + + + + + + + Allow libpq to accept + ParameterDescription messages exceeding 30000 bytes (Ning Sun) + § + + + + Previously, this message type was not among those + that libpq's validity heuristics believed + could be long. The limit resulted in failure for prepared queries + having more than 7498 parameters, which is unlikely but supported. + + + + + + + Fix null-pointer crash in ecpg compiler + (Jehan-Guillaume de Rorthais) + § + + + + ecpg failed on + a DECLARE section containing a union nested + inside a struct. + + + + + + + Reject multiple descriptor header items + in ecpg's GET/SET + DESCRIPTOR statements (Masashi Kamura) + § + + + + Previously the grammar allowed this syntax, but broken C code was + generated. Adjust the grammar and the documentation to allow only + one header item. + + + + + + + Fix issues with deferred errors in pipeline mode + in psql (Michael Paquier) + § + + + + psql could get stuck or suffer an + assertion failure in some scenarios where the server reports an + error in response to a Sync message, such as a deferred constraint + violation. + + + + + + + Make line widths match in psql's expanded + aligned output format (Pavel Stehule) + § + + + + When the table's data rows are narrower than the record header lines, + widen the data rows to match the headers, avoiding unsightly output. + + + + + + + Enforce the intended upper limit + for psql's special + variable WATCH_INTERVAL + (Sven Klemm, Daniel Gustafsson) + § + + + + If a too-large value was given, psql + reported an error but applied the setting anyway. + + + + + + + Fix psql's privilege check for showing + database size in \l+ (Christoph Berg) + § + + + + The underlying server function permits users who + have pg_read_all_stats privileges to see the + sizes of all databases, even if they lack CONNECT + privilege. But psql was unaware of that + provision and would not call the function unless the user + has CONNECT privilege. + + + + + + + Fix psql's tab completion + for \df to consider procedures too + (Erik Wienhold) + § + + + + + + + Fix thread-safety bug in pgbench + (Fujii Masao) + § + + + + When pgbench runs with multiple threads + and the option, different threads + could attempt to use the same buffer to construct error messages, + leading to corrupted log output. + + + + + + + In pg_combinebackup, prevent infinite + loop if the source file is shorter than expected (Peter Eisentraut) + § + + + + + + + Fix cleanup of publisher-side objects after errors + in pg_createsubscriber (Nisha Moond) + § + + + + When pg_createsubscriber fails after + creating logical replication objects, it should remove the + publication and replication slot that it created on the publisher. + Some error cases failed to do so. + + + + + + + Use the source cluster's group-read file permissions + for pg_recvlogical output files + (Fujii Masao) + § + + + + pg_recvlogical was documented to behave + this way, but it never actually enabled group-read. + + + + + + + Fix inconsistent behavior of pg_restore + with + or + (Chao Li, Michael Paquier) + § + § + + + + When combined with other selective-restore options such + as , these options failed to restore the + expected items, unlike pg_dump with + similar options. + + + + + + + Fix vacuumdb --missing-stats-only to ignore + partitioned expression indexes (Baji Shaik) + § + + + + Previously, vacuumdb would always attempt + to ANALYZE the partitioned table, accomplishing + nothing since statistics are never created for partitioned indexes, + only for their leaf indexes. + + + + + + + In contrib/amcheck, fix failure to report + corruption of a btree metapage's allequalimage + flag (Chao Li) + § + + + + + + + In contrib/amcheck, fix query-lifespan memory + leak while verifying a GIN index (Kirill Reshke) + § + + + + + + + In contrib/amcheck, handle short-header varlena + datums correctly (Andrey Borodin) + § + + + + This error could result in doing excess work while verifying a btree + index, but seems not to have had any worse consequences. + + + + + + + In contrib/btree_gist, + fix NaN handling in the float4 + and float8 opclasses (Bill Kim, Tom Lane) + § + + + + Comparisons, as well as the GiST penalty and distance functions, did + not account for NaN and would give the wrong + answer when handed one. It is recommended to + reindex btree_gist indexes on float columns + after installing this update, if there is any possibility that there + are NaN entries in those columns. + + + + + + + In contrib/btree_gist, fix sorting + of bit/varbit entries during GiST index + construction (Tom Lane) + § + + + + Values of bit types were sorted as though they + were byteas, which did not cause any obvious failure + but would result in an inefficient index, since the types' + representations are different. It is recommended to + reindex btree_gist indexes on bit columns + after installing this update. + + + + + + + In contrib/btree_gist, fix searches using a + not-equal operator (Ayush Tiwari) + § + + + + For variable-length data types, the code for scanning non-leaf index + pages applied the wrong comparison function, leading to wrong + results and potentially crashes. + + + + + + + In contrib/dblink + and contrib/postgres_fdw, ensure that a user-mapping + setting for use_scram_passthrough overrides one + for a foreign server (Matheus Alcantara) + § + § + + + + Previously the precedence went the other way, but that is + inconsistent with the behavior of other foreign-table options. + + + + + + + Reject setting use_scram_passthrough + on contrib/dblink foreign-data wrappers + (Matheus Alcantara) + § + + + + This option is only meaningful on foreign servers and user + mappings, but dblink incorrectly allowed it at the FDW level as + well (and then ignored it). + + + + + + + Fix unguarded recursion and loops in + contrib/hstore_plperl, + contrib/jsonb_plperl, and + contrib/jsonb_plpython + (Aleksander Alekseev) + § + § + + + + Prevent stack overflow when dealing with deeply + nested jsonb values, and allow interruption of the infinite + loop caused when attempting to dereference circular chains of Perl + object references. + + + + + + + Fix missed release of statistics catcache entry + in contrib/intarray (Man Zeng) + § + + + + This oversight led to warnings like resource was not closed: + cache pg_statistic. + + + + + + + In contrib/ltree, fix integer overflow in + comparisons (Ayush Tiwari) + § + + + + ltree values containing more than about 14,653 labels + resulted in wrong comparison answers due to overflow. If a btree + index contains such values, it is probably corrupt and should be + reindexed after installing this update. + + + + + + + In contrib/pgcrypto, avoid double-free crash + after encountering an error while using an OSSLCipher object + (Yuelin Wang) + § + + + + + + + Fix out-of-bounds access + in contrib/pg_prewarm's autoprewarm worker + (Matheus Alcantara) + § + + + + The code tried to fetch a value from one past the end of an array, + risking a segfault. + + + + + + + Fix array overrun in contrib/pg_surgery's + heap_force_kill and + heap_force_freeze functions (Michael Paquier) + § + + + + Attempting to change a TID whose offset number equals + MaxHeapTuplesPerPage wrote one byte past the end of the allocated + array, potentially crashing the server. + + + + + + + In contrib/pg_surgery, avoid infinite loop with + TID arrays having more than 64K elements (Andrey Rachitskiy) + § + + + + + + + Avoid NULL-pointer dereference + in contrib/refint's + check_foreign_key() (Ayush Tiwari) + § + + + + In the on-update-cascade case, a null value of a referenced column + led to a crash. This is an oversight in the fix for CVE-2026-6637, + but the code that was there before that wasn't really right either. + + + + + + + Remove the plan cache in contrib/refint + (Ayush Tiwari) + § + + + + This caching behavior has several serious bugs, notably that + check_foreign_key() embeds the new key values + in its cascade-UPDATE queries, so a cached plan reuses the + originally-needed values rather than the key values that should be + used. The simplest solution is to remove it. + + + + + + + Fix contrib/seg to print segments + with ~ certainty indicators correctly + (Ewan Young) + § + + + + Due to a typo, seg_out() did not print + a ~ certainty indicator attached to a segment's + upper boundary. Worse, if the lower boundary + had ~ while the upper boundary had no indicator, + the upper boundary was not printed at all, incorrectly converting + the value into an open interval. + + + + + + + Fix crash with namespace nodes in contrib/xml2's + xpath_nodeset() function (Andrey Chernyy, + Michael Paquier) + § + + + + + + + Support building PostgreSQL with Visual + Studio 2026 (Andrew Dunstan) + + + + + + + Support building PostgreSQL with + OpenSSL 4 (Daniel Gustafsson) + § + + + + + + + Update time zone data files to tzdata + release 2026c (Tom Lane) + § + + + + Alberta (America/Edmonton) will be on year-round UTC-06 + (effectively, permanent DST) beginning in November 2026. This + release assumes that their TZ abbreviation will + be CST from that time forward. That seems likely + to change, but it's unclear what new abbreviation will be used. + + + + Morocco (Africa/Casablanca) will move to permanent UTC+00, + without daylight saving time transitions, on 2026-09-20. + + + + + + + + Release 18.4