Build1 distinct publisher3 min readPublished
The 18.6 notes say a dump and restore is not required, then hand over three security entries that change defaults. Old pgcrypto messages stop decrypting by design, and third-party logical decoding plugins stop loading.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
The pgcrypto entry reaches backwards into data already written. pgcrypto asks OpenSSL for a cipher, and OpenSSL can refuse, as it does when it runs in FIPS mode or when the legacy provider has not been loaded [14]. The old code did not check that refusal. It went on to XOR the plaintext with a block that had never been encrypted, which the release notes describe as rendering the encryption trivially breakable [14]. The algorithms that typically land there are the deprecated ones: cipher-algo=blowfish/bf, twofish, cast5 and 3des [15]. Daniel Gustafsson's fix, from a report by Shishir Sharma, adds an ignore-cipher-failure option to pgp_pub_decrypt() and pgp_sym_decrypt() so the faulty wrapper can be stripped off and the data re-encrypted [13][16].
That escape hatch carries a precondition the notes state plainly. OpenSSL has to behave the way it behaved when the faulty messages were created, and if the set of unsupported algorithms is not the same, the approach does not work [17].
Logical decoding gets a narrower fix. The output plugin is a library name the client supplies, and before this release a replication user could select any loadable library, which the project says allowed exploits of various sorts [9]. Jacob Champion's patch bounds the choice to the contents of a new server parameter, output_plugin_libraries [8]. pg_upgrade --check now fails when the new cluster's setting does not permit the plugins of logical replication slots on the old cluster, for migrations from version 17 and later [11]. A pre-flight check that stops on a config line is the friendliest way to find this out.
Three entries in this release carry CVE numbers, and those three are exactly the ones the notes single out as needing configuration adjustment or data cleanup after updating [4][23]. Two of them land in client-side scripts rather than in the server. The psql change closes what the notes call a SQL-injection hazard in the worst case, because in-line data following a COPY that failed at startup was previously read as SQL commands [19]. A fourth entry, from Robert Haas, cross-checks the declared row types of the outer and inner portals used by EXECUTE and FETCH, which could previously be made to diverge, and it is not among the entries flagged for post-update work [22][27].
18.6 collects its fixes from 18.4 because 18.5 was never released, after a regression was discovered post-wrap [2][25].
The summary points at work without describing it. Indexes made with contrib/btree_gist or contrib/ltree may need reindexing [6], hedged with "may", and nothing at the top of the notes says which indexes qualify, nor what a corrupt reltuples value does to plan choice on a GIN-indexed table. Clusters coming from anything earlier than 18.2 get a further pointer, to Section E.4 [7]. The detail lives in the individual changelog entries, and sizing a reindex window takes those entries, not just the summary.
Ranked by verification strength, evidence, and original report placement.
PostgreSQL 18.6 has a release date of 2026-08-13 and contains a variety of fixes from 18.4.
The 18.6 notes state that 18.5 was never released, due to a regression discovered post-wrap.
The notes say the first three security entries describe configuration adjustments and data cleanups that you may need to make after updating.
The notes say that if you have any GIN indexes, see the changelog entry about possibly-corrupt reltuples values for their tables.
The notes say that if you use contrib/btree_gist or contrib/ltree, you may need to reindex indexes made with those extensions.
Distinct publishers with included, body-backed reporting in this cluster.
1 article · September 6, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
security
Someone enumerated LiteLLM's key tables 36 hours after the advisory hit defender feeds1 distinct publisher
product
Agent protocols now share one landlord: A2A joins MCP and AGENTS.md at the Linux Foundation1 distinct publisher
leadership
PostgreSQL's logical replication skipped the library check that guarded non-superusers1 distinct publisher
build
AWS's own agent fleet guidance puts the lock-in in state, auth and telemetry, not the framework1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Issuer's own page, nothing checked against it
Every specific in this story is verbatim from the PostgreSQL project's 18.6 notes: the parameter name, the default plugin set, the algorithm list, the new decrypt option, the CVE identifiers and the reporter credits. For a release note that is close to ideal sourcing, since the maintainer is the authority on what its own code now does. The weakness is that no second account exists, and our own count of CVE-bearing entries does not survive a careful read of the same page.
Shipped 13 August, adoption unconfirmed
The release is real and dated 13 August, and 18.5 never reached anyone at all. Beyond that, nothing: no distribution package announcement, no operator reporting a pgcrypto column that stopped decrypting, no account of pg_upgrade --check refusing a migration over a missing decoder. The breakage described here is latent by design, and latent breakage leaves no trace until someone upgrades.
Under-set against the same page
Our coverage takes the notes' three-flagged-entries structure as the shape of the release, and the alarm ends up lower than the source justifies. The portal row-type divergence on the same page is described as leading to memory disclosure and arbitrary code execution, and the to_char() overrun is described as easily crashing the server with exploits already reported. The pgcrypto and plugin items are correctly reported as operationally disruptive; the severity ceiling of the release sits above where we left it.
Maintainer writing up its own defect
The single voice belongs to the project that shipped the bug, and a volunteer-run database gains nothing commercially by explaining that its own crypto extension XOR'd plaintext and called it encryption. It names the outside reporters, including Ben Morris working with Claude and Anthropic Research on the portal flaw and OpenAI Codex Security among the to_char() reporters, and it documents the compatibility breakage it is imposing rather than burying it. The residual risk is editorial emphasis: a release note decides which three of its entries get a warning in the header.
Firm on what changed, blank on who it hits
What 18.6 does is not in doubt; it comes from the people who wrote it, in their own words, with identifiers attached. How much of the installed base holds blowfish-era pgcrypto ciphertext, or runs a decoder that is not pgoutput, is entirely outside this reporting, and the one number we derived ourselves was wrong.