
The September 21–28 brief turns three PgBouncer CVEs, a Weaviate HNSW memory cut, and a production Galera stall into concrete upgrade gates, with the numbers behind vector-search memory cost.
| Date (UTC-08:00) | Engine / Component | Verified change | Upgrade gate & trade-off | Immediate action |
|---|---|---|---|---|
| 2026-09-23 | PgBouncer 1.26.0 | Fixes CVE-2026-19888, CVE-2026-6668 and CVE-2026-6669, two of them triggerable by unauthenticated clients; tracks search_path and default_transaction_read_only by default; removes online restart (-R) 1 | The two pre-auth bugs take down the whole pooler, which is single-threaded; the new default tracking changes behaviour for clients that SET those parameters under transaction pooling | Upgrade, and rehearse the removed -R path before an emergency restart needs it |
| 2026-09-22 to 2026-09-25 | Weaviate v1.38.17, v1.39.6, v1.39.7 | HNSW vertex cut from 48 to 24 bytes per node; LSM store performance work; ACORN tombstone deadlock fix; RAFT boot-time race and async-replication fixes; filtered batch delete capped at QUERY_MAXIMUM_RESULTS 8 | The vertex change is a memory-footprint cut on the hot index; the RAFT and replication fixes target crash and stall paths | Patch the branch you run; the vertex change takes effect on the next restart |
| 2026-09-24 | PostgreSQL 19 Beta 4 | Four features pulled: SQL/PGQ, online data-checksum toggling, FOR PORTION OF temporal updates and deletes, ALTER TABLE ... MERGE/SPLIT PARTITIONS 4 | Anything planned around those four leaves the 19 migration plan; release candidate in early October, GA possibly October | Re-scope 19 upgrade work |
| 2026-09-24 | PyMongo 4.18.2 | Three CVEs: a bson buffer-size guard overflow, per-host decoding in connection strings, and a client-side field-encryption check on KMS endpoints 5 | All three sit in the driver, one reachable from a supplied connection string | Patch Python services |
| 2026-09-28 | MongoDB Node.js driver 7.7.0 | A failed OIDC token fetch no longer poisons the client: the token-fetch mutex held the failure, and every later operation on that MongoClient failed until the process restarted 9 | Affects long-lived Node services on OIDC or Atlas auth; the rest is dependency bumps | Patch, or accept a restart-to-recover failure mode |
| 2026-09-24 | MongoDB C Driver 1.30.12, 2.5.5 | Windows Secure Channel allocation fix; polled-stream handling in the single-threaded topology scanner 1011 | Maintenance only | Take with the next build |
| 2026-09-28 | MongoDB leadership | CEO Chirantan Desai left for Meta after less than a year; Dev Ittycheria returns as interim CEO; shares fell 18% in morning trading 6 | A vendor-relationship signal with no product or support commitment attached to it | Weigh it when assessing vendor risk |
| 2026-09-28 | Percona XtraDB Cluster + pt-online-schema-change | A production schema change with a selective --where triggered Galera flow control and a cluster stall; adaptive chunk resizing grew one transaction to hundreds of thousands of rows 7 | Schema migrations on clustered replication carry an availability trade-off | Add --chunk-time=0 and --max-flow-ctl=0 to selective --where runs |
| 2026-09-25 | PlanetScale architecture guidance | Postgres data files are not portable between x86-64 and ARM64, so a cluster's architecture is fixed at creation 12 | New clusters only; resizing and adding replicas keep the architecture | Treat architecture as a migration-class decision |
max_packet_size sits at its default. PgBouncer is single-threaded, so the hang stopped it serving every client and every database until the process was killed. The blast radius is the pooler, which for most estates means everything behind it 13.search_path on PostgreSQL 18 and above and default_transaction_read_only on PostgreSQL 14 and above under tracking; before this release, a client running SET search_path or SET default_transaction_read_only = true in transaction pooling mode changed the session state of other clients that later used the same server connection. pool_idle_timeout is added to reclaim pools that have gone unused, disabled by default because removing a pool also removes its statistics. And query_wait_timeout can now be set per user and per database instead of only globally.-R takeover path — is removed, together with the SHOW FDS and SUSPEND admin commands that existed only to support it; the documented replacement is a rolling restart with so_reuseport. PgBouncer also now sends its own ParameterStatus messages at login (pgbouncer.version, pgbouncer.pool_mode, pgbouncer.max_prepared_statements), so drivers and client libraries can detect the pooler and adapt their behaviour. A new client_login_count statistic in SHOW STATS makes connection churn measurable for the first time.COPY messages no longer exhaust the pool, which also makes COPY work outside an explicit transaction in that mode. SCRAM pass-through no longer corrupts the cached credentials of a forced user, and the pass-through failure introduced in 1.25.1 after a server reconnect is fixed. A use-after-free crash is closed for the case where a replication client disconnects while its server connection is still logging in, and a single replication client can no longer evict every idle server in the pool 13.-R for a restart without dropped connections, that step now fails.1.1 × (4 × dimension + 8 × M) bytes per vector, where 4 × dimension is the float32 vector itself, 8 × M is the graph's per-node connection overhead, and the 1.1 is roughly ten percent slack. Dimensionality sets the hardware tier more than document count does, because that per-vector figure multiplies by everything you store.| What is measured | Published figure | Origin and source |
|---|---|---|
| In-memory HNSW footprint per vector | about 1.1 × (4 × dimension + 8 × M) bytes | OpenSearch documentation, via 2 |
| One million 1536-dimension float32 vectors | about 6.1 GB before graph overhead | text-embedding-3-large embeddings, via 2 |
| Ten million 1536-dimension float32 vectors | roughly 60 GB, RAM-resident for predictable latency | via 2 |
| HNSW index size against raw vectors | 2–5× | via 2 |
| IVFFlat index size against raw vectors | about 1.1× | via 2 |
| HNSW recall moved from 95% to 100% | roughly 7× in throughput | Lucene benchmark discussion, via 2 |
| int8 scalar quantization | about 75% memory cut, raw vectors kept on disk for rescoring | Lucene, via 2 |
| Binary quantization | 32× memory reduction | via 2 |
| Qdrant binary quantization at 4× oversampling | 0.98 recall@100 on 1536-dimension OpenAI embeddings | Qdrant, via 2 |
| Elasticsearch Better Binary Quantization | 138M × 1024-dimension dataset from about 535 GB to about 19 GB | Elasticsearch, via 2 |
| DiskANN | one billion points on a single 64 GB machine plus SSD, 95+% recall, thousands of queries per second | Microsoft Research, via 2 |
| Disk-based against in-memory search, p90 latency | 96 ms against 24 ms | OpenSearch, via 2 |
| Amazon S3 Vectors | target of up to 90% lower cost on large vector datasets | AWS, via 2 |
QUERY_MAXIMUM_RESULTS with the cap now exposed in the gRPC BatchDeleteReply, filter and document-id resolution run in parallel, BatchStream gets soft memory backpressure, and an invalid class name returns 422 or 404 instead of 500 or 403. Slow-query log lines now summarize storage lookup timings 15.FOR PORTION OF clause that provided temporal updates and deletes, and reverts ALTER TABLE ... MERGE PARTITIONS and ALTER TABLE ... SPLIT PARTITIONS. It also removes the pg_get_role_ddl(), pg_get_tablespace_ddl() and pg_get_database_ddl() functions, and reverts the change that forced LC_COLLATE to C in the postmaster process.REPACK command (crashes, invalid indexes and materialized views, permission and error reporting), the new WAIT FOR command (a deadlock and clearer isolation-level errors), an empty FOREIGN_JOIN list in pg_plan_advice, CREATE PUBLICATION ... EXCEPT, logical replication initial table synchronization from an older server to v19, logical replication conflict detection, and the new autovacuum scoring system including TOAST tables. A crash is fixed for the case where a partition's concurrent detach did not complete, the COPY FROM SIMD optimization is corrected, and pgbench --continue-on-error now reports failed transactions separately..sock. The second one is the one to reason about, because connection strings arrive from configuration and environment rather than from the wire, and the fix changes how multi-host strings are parsed.MongoClient then failed with the original error and never attempted a new token fetch, and only restarting the process restored authentication. A failed fetch now affects only the operation that triggered it, and the OIDC callback lock is re-armed after a rejection. The rest of the release is dependency bumps: bson to 7.3.2, mongodb-connection-string-url to 7.0.2 and @mongodb-js/saslprep to 1.5.0.pt-online-schema-change run adding an index with a selective filter: --where "created_at >= NOW() - INTERVAL 30 DAY". About 10 million rows matched; the other 990 million did not, and because created_at rose in step with the primary key, every matching row sat at the end of the clustered index. Percona XtraDB Cluster is Percona's MySQL-compatible cluster built on Galera replication, so every copied chunk leaves the writer as a write set that all nodes must certify and apply.pt-online-schema-change continuously resizes its copy chunks to hold each one near --chunk-time, 0.5 seconds by default, shrinking them when chunks run slow and growing them when chunks run fast. Scanning the long run of rows the filter discarded, every chunk finished almost instantly, so the adaptive algorithm kept concluding that chunks were too small and kept growing them. When the scan finally reached the matching rows, one transaction copied hundreds of thousands of rows, and in the reported case that figure reached into the millions.MY-014084 — threads unable to reserve space in the redo log because the log_checkpointer consumer was lagging behind, with a suggestion to raise innodb_redo_log_capacity — and the same message appeared on the other nodes during apply. The observable symptoms are the ones to alert on: a rising flow-control percentage, a growing wsrep_local_recv_queue, replication lag between nodes, waiting application commits, and more frequent checkpoints on every node 7.--chunk-time=0 holds the chunk size fixed for the whole run, or you can set --chunk-size explicitly and leave --chunk-time out. Adding --max-flow-ctl=0 makes the tool pause copying at the first sign that any node has entered flow control and resume when the cluster recovers, which trades migration duration for cluster stability. Two secondary levers: --chunk-index can chunk on a secondary index whose ordering is uncorrelated with the filtered column, spreading matching rows across chunks, though a poorly chosen chunking index forces bad query plans; and the two-phase alternative is to delete the rows with pt-archiver first, then alter the table without a --where clause 7.aarch64 or x86-64 for a Postgres cluster, and the load-bearing fact is that the choice is permanent for that cluster 12. Postgres's on-disk files are not portable between the two architectures, so the usual move to new hardware — stand up a replica and promote it — fails, because a replica starts from a byte-for-byte copy of the primary's files and replays the write-ahead log rather than rebuilding the database. The worked example in the post is a signed-char mismatch: GCC and Clang default to signed char on x86-64 Linux and unsigned char on ARM64 Linux, so the byte 0xFF reads as −1 on one and 255 on the other, and pg_trgm's trigram ordering depends on char comparisons. Postgres addressed that specific case in version 18, per a linked mailing-list message, and other engine components can carry the same class of assumption.AND; pgvector carries AVX-512 code for Hamming and Jaccard distance and falls back to general-purpose code on ARM 12.show hn on the application it was forked from, with monthly cost of $609 against $5,186 23. Both are scoped to one engine family, and neither placed separate engines on shared hardware.at time zone 'UTC' semantics reached 136 points on September 26, which is community signal about a correctness footgun rather than any engine's change, and it is worth reading on its own terms 26.search_path and default_transaction_read_only, and the removal of -R — before either is needed in an incident.FOR PORTION OF, online checksum toggling and partition split and merge are not in 19.--chunk-time=0 and --max-flow-ctl=0 to any pt-online-schema-change run that filters with a selective --where on a cluster with clustered replication.postgresql.org
postgresql.org
mongodb.com
github.com
mongodb.com
mongodb.com
mongodb.com
planetscale.com
pgbouncer.org
mongodb.com
news.ycombinator.com
postgresql.org
forums.mysql.com
github.com
github.com
github.com
planetscale.com
planetscale.com
db.cs.cmu.edu
news.ycombinator.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.