Build1 distinct publisher3 min readPublished
Five supported branches picked up 28 security fixes and more than 110 bug fixes, but three of the entries only take effect once you find and rebuild the objects they touch, and one of them does not self-correct.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
A package upgrade swaps binaries without rewriting bytes already committed to an index. That gap is why two entries in this release come with homework attached.
The btree_gist work changes comparison behaviour: NaN handling for float4 and float8 that could give wrong answers on columns containing NaN, plus correct sorting of bit and bit varying values during index building [8]. New code that sorts correctly does nothing for pages an older build already laid down in the old order, which is why the announcement says you may need to reindex btree_gist indexes on float or bit columns after updating [8]. ltree has the same shape. Values carrying more than about 14,653 labels could compare incorrectly, and the symptom is a B-tree index that presents as corrupt [9].
The third item is nastier, because it is stored state rather than page layout. A parallel worker could report an uninitialized row count, leaving reltuples in pg_class set to a bogus value including Infinity or NaN [6]. Autovacuum and autoanalyze then stop processing the table, and the situation will not self-correct [6]. Upgrading stops new bad values from arriving, but the one already sitting in the catalog stays put. The project recommends checking that reltuples looks reasonable on any table with a GIN index, and points at the release notes' Updating section for how to identify and repair affected tables [7]. The announcement counts three issues that may require extra steps after updating, and names btree_gist and ltree in that list [4].
On the security side there are 28 vulnerabilities closed across the five supported branches [2][16], with affected versions carried in per-vulnerability links rather than in the announcement body [13]. One issue is flagged as affecting only 14, 15 and 16, highlighted for its severity [14]; the remaining listed items affect 18, and many affect other supported versions as well [15]. Triage by severity therefore means opening the links, not reading the release note.
Several bug fixes justify the window on their own. The DEFAULT partition of a RANGE-partitioned table is no longer skipped in cases where it should be scanned, a bug that could leave rows missing from query results [10]. Under SERIALIZABLE, a conflict could be missed when examining an initially-empty btree index, allowing conflicting transactions to commit [11]. jsonpath's @? and @@ operators now raise an error for an undefined variable instead of treating it as JSON null, which could also lead to unbounded memory consumption [12]. And a large effective_io_concurrency could let a single read stream consume all local buffers, producing "no empty local buffer available" errors during temporary table access [18].
Version numbering on 18 has a hole in it. Operators move from 18.4 to 18.6, and 18.5 exists only as a gap because it was not shipped after a regression [3][17].
Whether this update costs a restart or a maintenance window is an inventory question: btree_gist indexes on float or bit columns [8], ltree values deep enough to pass roughly 14,653 labels [9], and GIN indexes anywhere in the cluster [7]. Answer those three and the size of the job is known. Anyone still on 14 has a longer answer to write, since fixes stop on November 12, 2026 and a major-version upgrade is a bigger piece of planning than any reindex here [5].
Ranked by verification strength, evidence, and original report placement.
The PostgreSQL Global Development Group released updates to all supported versions of PostgreSQL, including 18.6, 17.11, 16.15, 15.19 and 14.24, as well as the third beta release of PostgreSQL 19.
The release fixes 28 security vulnerabilities and over 110 bugs reported over the last several months.
The release skips PostgreSQL 18 versions from 18.4 to 18.6; 18.5 was not shipped due to a regression.
The announcement states there are three issues that may require extra steps after updating, and lists them as related to btree_gist and ltree.
PostgreSQL 14 will stop receiving fixes on November 12, 2026, and the project suggests that anyone running PostgreSQL 14 in production make plans to upgrade to a newer supported version.
A parallel worker could report an uninitialized row count, leaving the reltuples value in pg_class set to a bogus value including Infinity or NaN; such a value can cause autovacuum and autoanalyze to not process the table, and this situation will not self-correct.
Distinct publishers with included, body-backed reporting in this cluster.
1 article · September 5, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
Sling's incremental mode leaves five cancelled orders alive in the warehouse1 distinct publisher
security
Any PostgreSQL replication account can load a shared library as the postgres OS user4 distinct publishers
build
Notion's agent stack is live, not slideware, and it only changes one of your decisions1 distinct publisher
build
The 680 MB database that was really a 17 GB disk: self-hosted support platforms fail at month six1 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.
Primary, precise, and entirely self-reported
One document carries the whole story, and it happens to be the one written by the people who wrote the code. Much of it is checkable on your own database: a catalog query for the GIN reltuples problem, a specific label count for ltree, named columns types for btree_gist. What is not checkable is the security half — 28 fixes appear as a number, with identifiers and affected versions pointed to elsewhere — and the reason 18.5 never shipped.
Five branches shipped, uptake unknown
The artefacts exist: five supported branches plus a 19 beta, published together. What our coverage cannot show is anyone consuming them -- no distribution packaging, no managed-service rollout, and no report of an operator actually finding a bogus reltuples value or rebuilding an ltree index. We can point to what was released; we have nothing on who has actually installed it.
Milder wording than the consequence
Nothing in this announcement is inflated; the interesting gap runs the other way. The clause saying autovacuum and autoanalyze will never process an affected table, and that the state will not self-correct, sits as one bullet among more than a hundred bug fixes, and the reindexing work arrives as a recommendation. A table quietly excluded from vacuuming carries more weight than that placement gives it.
Maintainers grading their own release
PostgreSQL has no price list or quarter riding on this, which removes the usual commercial pull. It is still self-assessment: the withdrawn 18.5 gets a clause and no post-mortem, and the manual index rebuilds are phrased as things you may need to do rather than steps the update leaves undone. A volunteer project has a modest interest in patch releases reading as routine.
Solid on what shipped, shakier past that
For what shipped and what an administrator must do next, the sourcing is as good as this kind of story gets. Outside that boundary — the severity of the 28 vulnerabilities, the cause of the missing 18.5, whether anyone has yet rebuilt the affected indexes — there is nothing here to lean on.