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/JSONON 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