PostgreSQL Ships Emergency Out-of-Cycle Release After Security Patches Break Core Text Functions and Standby Replication
PostgreSQL 18.3, 17.9, 16.13, 15.17, and 14.22 fix regressions introduced when patching five CVEs, including a broken substring() function on non-ASCII text and standby servers halting mid-replication.
Overview
The PostgreSQL Global Development Group has released an emergency out-of-cycle update covering all five supported version branches — 18.3, 17.9, 16.13, 15.17, and 14.22 — to fix regressions introduced just two weeks earlier when the project shipped patches for five security vulnerabilities, three of which carried CVSS scores of 8.8. The February 26 release addresses broken multi-byte text handling in the substring() function, standby replication failures, and several additional bugs that surfaced after the February 12 security update.
The episode illustrates a recurring tension in database engineering: security patches that must be deployed quickly can introduce their own breakage, forcing maintainers into a second rapid release cycle.
What Happened on February 12
On February 12, the PostgreSQL project released versions 18.2, 17.8, 16.12, 15.16, and 14.21 to address five CVEs along with over 65 bug fixes. Three of the vulnerabilities allowed arbitrary code execution as the operating system user running the database:
- CVE-2026-2006 (CVSS 8.8): Missing validation of multibyte character length in core text manipulation functions enabled a buffer overrun that could be exploited by any authenticated database user to execute arbitrary code.
- CVE-2026-2005 (CVSS 8.8): A heap buffer overflow in the
pgcryptoextension let a ciphertext provider achieve the same result. - CVE-2026-2004 (CVSS 8.8): The
intarrayextension’s selectivity estimator accepted untrusted input types, again enabling code execution.
Two additional flaws rounded out the advisory: CVE-2026-2007 (CVSS 8.2), a heap buffer overflow in pg_trgm that the project has not ruled out as a path to privilege escalation, and CVE-2026-2003 (CVSS 4.3), a memory disclosure bug in the oidvector type.
The severity of these vulnerabilities — particularly CVE-2026-2006, which affected core server functionality rather than an optional extension — meant that organizations were strongly urged to patch immediately.
The Regressions
Within days, reports surfaced that the security fixes had introduced new problems. The PostgreSQL project announced the out-of-cycle release on February 18, identifying the following regressions:
Broken substring() on non-ASCII text. The fix for CVE-2026-2006 inadvertently caused the substring() function to raise an "invalid byte sequence for encoding" error when operating on multi-byte (non-ASCII) text values sourced from database columns. Literal string values were unaffected, making the bug particularly insidious — it could pass basic tests while breaking production queries on internationalized data.
Standby replication halt. Standby servers began halting with the error "could not access status of transaction", disrupting high-availability setups that depend on streaming replication.
pg_trgm crashes. An oversight in the fix for CVE-2026-2007 caused the strict_word_similarity function in the pg_trgm extension to produce incorrect output or crash outright.
The PostgreSQL wiki page for the regression fixes documented workarounds and commit-level patches for administrators who could not wait for the February 26 release.
What the February 26 Release Fixes
The new release addresses all three regressions above plus several additional issues that were either discovered concurrently or introduced in the same update cycle:
json_strip_nulls()volatility mismark: The function was incorrectly marked as volatile instead of immutable, preventing its use in index expressions. Users upgrading from PostgreSQL 18.0, 18.1, or 18.2 must run a manual catalog update in every database, includingtemplate0andtemplate1.- LATERAL UNION ALL incorrect output: Certain queries using
LATERALwithUNION ALLandNOT NULLtests could return wrong results. - NOT NULL constraint naming conflicts: Auto-generated constraint names could collide with user-defined constraints.
hstorebinary input crash: Thehstoreextension crashed when receiving binary input containing duplicate keys.- PL/pgSQL composite-type casting failure: Functions returning domain types over composite types could fail when casting variables.
Upgrading requires only a binary replacement and restart — no dump/reload or pg_upgrade step is needed. The next regularly scheduled update is May 14, 2026.
What This Means for PostgreSQL Users
Administrators who applied the February 12 patches face a straightforward upgrade path: install 18.3, 17.9, 16.13, 15.17, or 14.22 and restart. Those running applications that process non-ASCII text through substring() or rely on standby replication should treat the update as urgent.
Organizations that delayed the February 12 update can now go directly to the latest point release, getting both the security fixes and their regression corrections in a single step.
What We Don’t Know
The PostgreSQL project has not disclosed whether any of the five CVEs patched on February 12 were being actively exploited in the wild before the patch. The project’s security page notes that CVE-2026-2007’s potential for privilege escalation has “not been ruled out,” leaving some ambiguity about the full risk surface.
It is also unclear how many production deployments were affected by the substring() regression. Systems running exclusively on ASCII data or not using the function on column values would have been unaffected, but any application handling Unicode text — which, in 2026, is most of them — was at risk of silent query failures.
Analysis
Out-of-cycle releases are rare in the PostgreSQL project’s history and signal that the maintainers judged the regressions severe enough to override the normal quarterly cadence. The root cause — a security fix for multibyte character handling that itself broke multibyte character handling — highlights the difficulty of patching low-level text processing code under time pressure.
The incident is a reminder that even the most mature open-source projects can ship regressions when critical security patches demand rapid turnaround. For database administrators, it reinforces the value of staging environments and regression test suites that cover internationalized data paths before rolling security updates into production.