← All digests

DBMS Weekly — 2026-08-17 (week of 2026-08-17–2026-08-23)

A committers' week rather than an announcements week. Peter Geoghegan spent it fixing index correctness — three separate GIN VACUUM bugs plus a GiST kill-item inconsistency and a snapshot- import xmin race — while Richard Guo landed a four-commit series that reduces outer joins to anti joins, and Daniel Gustafsson pushed online data checksums further into the control file. Melanie Plageman filed checkpointer write combining into the open CommitFest after eleven months and sixteen patch versions. On -hackers, an RFC asked whether full-page writes are necessary at all if you stop overwriting the checkpoint's physical page, Andres Freund started picking at SQL/PGQ's catalog design a month before 19 ships, and someone found that ON CONFLICT DO SELECT returns a row nobody predicate-locked. Outside the tree: DuckDB previewed 2.0 with a client/server mode and a new PEG parser, Elasticsearch announced a columnar storage mode, and the sharpest Postgres operations piece of the week was about a Kubernetes metric that lies to you.

PostgreSQL

  • Sixteen locks ought to be enough for anybody — every query takes an AccessShareLock on every index of every table it touches, used or not, and max_locks_per_transaction counts them; the arithmetic bites partitioned tables with many indexes long before anyone expects it. (Christophe Pettus · thebuild.com)
  • Why Postgres breaks the Kubernetes container_memory_working_set_bytes metric — the metric that decides whether your pod gets evicted is current − inactive_file, which counts shared-buffer page cache as "working set"; Jeremy Schneider reproduces the divergence with cgroup v2 measurements, shows it neither predicts nor prevents an OOM kill for Postgres, and proposes metrics that do. Scripts and graphs are in a repo. (Jeremy Schneider · ardentperf.com)
  • pg_shmemviz: a shared-memory visualizer — snapshots the main and dynamic shared-memory segments to an offline file and renders a physical map, allocation table, DWARF-driven structure inspector (field offsets, compiler padding, array stride padding) and a raw-bytes view, all cross-linked and navigable through pointers across segments. The pg_walviz treatment applied to shmem. (Bertrand Drouvot)
  • Failover slot synchronization in PostgreSQL — how PG17's failover slots keep a logical slot warm on a standby so a subscriber survives promotion without a full resync, written by one of the people who built it. (Ajin Cherian · Fujitsu) [by author]
  • The time traveler's primary key — why UUIDv4 primary keys turn a B-tree's tidy right-edge insert pattern into random leaf-page dives, and what the time-ordered variants actually buy back. (Shaun Thomas · pgEdge)
  • The insert that fails right after a clean load — explicit id values never advance the sequence, so a fixture load that verifies perfectly leaves the table broken for the next insert; run against 18.6 with pasted output, and correct on the details people get wrong (setval on a NULL does nothing; is_called decides whether you lose an id; identity columns change nothing except that GENERATED ALWAYS refuses louder). (Mikhail Shytsko · seedfa.st)
  • How fast are Postgres 19 graph queries? — measured against a 19beta1 build: the fixed-depth SQL/PGQ GRAPH_TABLE query compiles to the same plan as the hand-written join, and the variable-depth traversal — the thing graph databases exist for — still loses to a recursive CTE. Apache AGE runs the same indexed traversal behind Cypher. (Alexander Ioffe · exobench.ai)
  • Postgres 19: how our advice has changed since we wrote it — a decade of load/storage/index/partitioning posts revisited against current betas: which recommendations async I/O, LZ4-by-default, BRIN shapes and skip scan actually invalidated, and which still hold from the Postgres 10 era. Explicitly caveated as beta-based. (Christopher Winslett · Crunchy Data)
  • The request becomes a transaction — argues the API boundary is drawn in the wrong place: authentication and HTTP adaptation belong at the network edge, but validation, authorization against current state, the state transition and result shaping all terminate in Postgres anyway, so make the transactional operation the unit of design and let REST be a binding to it. Opinionated; the testing argument (assert response and state transition in one snapshot, roll back) is the strongest part. (Alexey Evlampiev)
  • Hackorum, six months on — the forum-style reader over pgsql-hackers gains CommitFest, patch and CI status icons in the topic index. Useful if you triage the list rather than read it. (Kai Wagner · Percona)

Releases

  • pg_statviz 1.2 — the minimalist stats time-series extension picks up PostgreSQL 19 and a lock-analysis module. (Jimmy Angelakos)
    • captures the new wal_fpi_bytes counter from pg_stat_wal; snapshots PG18/19 I/O-worker, effective-WAL-level and autovacuum-scoring settings
    • new blocking locks module: per-snapshot counts of blocked and blocking sessions with a breakdown by lock type, built on pg_blocking_pids() so soft blocks (waiting behind someone in the queue) count too; table size independent of session count
    • new openai AI provider alongside Claude/Gemini, endpoint and model selectable by env var; zero-dependency install unchanged
    • tested against 19 beta3 and across PostgreSQL 13–19
  • pgColumnar 1.0-alpha2 — second alpha of the columnar table access method (previous alpha Aug 4). (Joshua Drake · Command Prompt)
    • read-only Apache Iceberg support; reads and writes over S3-compatible object storage
    • a maintenance daemon, plus a broad round of statistics, planner, performance and security work
    • on-disk native format (PGCN v1) unchanged — existing tables read and write as before
  • Loongson loong64 packages on apt.postgresql.org — a new architecture joins the official APT repository's build, sign and security-update chain. (apt.postgresql.org)

PostgreSQL mailing lists

624 messages on pgsql-hackers in the window, 90 of them new threads.

What landed (pgsql-committers)

CommitFest (open: PG20-2, #61)

Community pulse

  • PostgreSQL for everything — Raphael Bauer's case for collapsing queue, cache, search, cron and analytics into one Postgres; 267 comments arguing the boundary, mostly along "until you can't" lines, with the strongest replies putting numbers on where each substitute stops scaling. A SQLite-for-everything counterpart drew its own 19-comment thread on Lobsters the same week. (Hacker News · 438 pts, 267 comments)
  • Rethinking database programming — "what if SQL were like Elm": a typed, composable query language proposal that got taken seriously enough to spawn a long argument about whether SQL's problems are in the language, the drivers, or the ORMs — and a parallel 140-point r/programming thread. (acadia.engineering · Hacker News 259 pts, 160 comments)
  • Things I want in a modern relational query languagethe post is a wish list; the 12-comment Lobsters thread is the useful part, with people naming which of the wishes already exist somewhere (PRQL, Rel, FROM-first syntax) and which are genuinely hard. (Lobsters · 12 comments)
  • What are you using for Postgres after outgrowing the free tier but not needing AWS? — zero points, 27 comments: the recurring managed-Postgres pricing-cliff thread, this time with a companion post from someone leaving Cloud SQL and asking what HA/backup stack to self-run. Sort by comments, not score, or you miss these. (r/PostgreSQL · 0 pts, 27 comments)
  • Why does ORDER BY … LIMIT 200 choose a 15× slower ordered index scan? — the one genuinely interesting DBA Stack Exchange question of the week: the classic LIMIT-plus-ordered-index trap where the planner assumes rows are found early and they aren't. Notable that it was asked against PolarDB-for-PostgreSQL — the fourth week running that PolarDB questions cluster there. (DBA Stack Exchange · 2 votes, 2 answers)

Wider DBMS & distributed data

  • A preview of DuckDB v2.0 — the in-process database grows a process boundary: a client/server mode via the Quack extension and a CONNECT statement, so any DuckDB can serve databases over the network. Also triggers, a first-class VARIANT type, asynchronous I/O that scales independently of query processing, a stable C API that lets extensions compile from one header and survive releases without recompiling, a new storage format, and a rewritten recursive-CTE engine (a recursive benchmark runs 40× faster than 1.5.4). Nightly-only; release targeted for autumn. (DuckDB)
  • DuckDB v2.0: your database deserves a better parser — the companion piece on replacing the Postgres-derived bison parser with a PEG grammar: better error messages, incremental parsing and a grammar you can actually read. Postgres hackers who have stared at gram.y will have opinions. (DuckDB)
  • Why Elasticsearch is becoming a columnar database — "Columnar Mode" ships in 9.5, storing data column-wise for logs, telemetry, metrics and analytics workloads while leaving APIs and integrations untouched. The interesting part for engine people is that it sits alongside the existing modes on the same data in the same cluster, rather than replacing the inverted index. (Elastic search-labs) [vendor blog — substantive]
  • Encoding or compression: why not both? — measured on ClickBench's ~100M-row hits table: zstd-19 took 32.6 s on the string column and 19.1 s on the numeric one, versus under 30 ms for encoding — but the real argument is structural, not the timing. A compressed block is opaque: no binary search, no per-value random access, no comparing two values without decoding both. (CedarDB)
  • Poisoned Postgres connection pools — in PgBouncer transaction mode a client that sets default_transaction_read_only = on or session characteristics leaves that state on the shared backend, and the next tenant gets SQLSTATE 25006, "cannot execute INSERT in a read-only transaction", from a perfectly healthy primary. How to tell a poisoned pool from a genuinely read-only database. (PlanetScale) [vendor blog — substantive]

Commercial engines (SQL Server, Oracle, MySQL, …)

  • Concurrency vs. throughput: why more parallelism can make databases slower — a real Vitess/MySQL incident where one long-running query plus ten thousand admitted requests filled the transaction pool; because that pool fails rather than queues, throughput collapsed while concurrency climbed. The general lesson (past the efficient point each extra in-flight query slows all the others) transfers straight to Postgres connection sizing. (PlanetScale)

Research & cutting edge

  • Building an integrated vector database system in PostgreSQL — Jianguo Wang's group on what it takes to make vector search a first-class part of a relational engine rather than an extension bolted beside it: storage, indexing and the planner's view of ANN operators. (Liu, Guo, Wang · Aug 18) [paper]
  • Logos: certified order-sensitive SQL rewrites with mechanized semantics and LLM guidance — an LLM proposes the rewrite, a mechanized semantics proves it preserves order-sensitive results; the interesting bit is treating "SQL is not bag-of-rows once ORDER BY/LIMIT enter" as a formal obligation rather than a footnote. (Ke, Li, Li · Aug 18) [paper]
  • Stop indexing at full precision: revisiting clustering for vector embeddings — Kuffo and Boncz (CWI) argue that building the index over quantized vectors, not full-precision ones, changes the cost/recall trade-off enough to be the default. VLDB 2026 vector-databases workshop. (Kuffo, Boncz · Aug 18) [paper]
  • Rerootable hypertree decompositions — join-order theory: decompositions that can be re-rooted without recomputation, which is what you want when the same query shape is evaluated from different entry points. Koch, Pichler and Qichen Wang among the authors. (Jiang, Koch, Lindner, Pichler, Wang · Aug 19) [paper]
  • Which eviction policy should an LLM cache use? — a systematic sweep across workloads, capacities and encoders; a rare piece of buffer-management empiricism in a subfield that mostly assumes LRU and moves on. (Kulkarni, Harkare, Babu · Aug 21) [paper]

International (non-English sources)

  • ora2pg moves about 80% of an Oracle schema — what happens to the other 20% — the migration report the tool vendors don't write: what ora2pg leaves on the floor (packages, autonomous transactions, hierarchical queries, NUMBER semantics, empty-string-is-NULL) and how the remaining fifth actually gets rewritten. (habr.com, Aug 22) [ru] (orig: «ora2pg переносит около 80% Oracle‑схемы. А что происходит с оставшимися 20%?»)
  • Why is PostgreSQL's numeric type so slow? — the storage layout and per-operation arithmetic that make numeric the expensive default, with measurements against the fixed-width types. Sequel to the same team's "why is numeric so popular" piece from the previous week. (Tantor · habr.com, Aug 22) [ru] (orig: «Почему тип numeric в PostgreSQL такой медленный?»)
  • REPACK in PostgreSQL 19: repacking in core, and as always the devil is in the details — what the in-core REPACK command does and does not replace from pg_repack, including the lock windows and the cases where it still rewrites more than you expected. (habr.com, Aug 20) [ru] (orig: «REPACK в PostgreSQL 19: перепаковка в ядре и, как всегда, дьявол в деталях»)
  • Four CTE anti-patterns, read off EXPLAIN ANALYZE — post-12 CTEs inline by default, which changed which mistakes are expensive; four concrete shapes with the plans that expose them. (habr.com, Aug 20) [ru] (orig: «Четыре антипаттерна CTE в PostgreSQL: разбираем на EXPLAIN ANALYZE»)
  • The dark side of compression in PostgreSQL — where TOAST compression costs more than it saves, and how to see it. (Tantor · habr.com, Aug 19) [ru] (orig: «The dark side of компрессия в PostgreSQL»)
  • NVMe does 600,000 writes a second and the database commits 180 — the gap between raw device throughput and committed transactions per second, walked back through WAL flush, fsync semantics and group commit. (OTUS · habr.com, Aug 19) [ru] (orig: «NVMe выдаёт 600 000 записей в секунду, а база коммитит 180»)

~58 items · sources scanned: Planet PostgreSQL (live, full window), pgsql-hackers via the official archive (624 messages / 90 new threads enumerated across Aug 17–23), pgsql-committers via mail-archive (thread index fresh through Sunday, msg48301–msg48509), postgresql.org news archive + events page, CommitFest #61 detail page and per-CF activity log, HN via the Algolia API (8 keyword queries over the Aug 17–23 epoch window, verified points/comments), Lobsters /t/databases, seven subreddits via the read-only JSON API sorted by comment count, DBA Stack Exchange via the API, arXiv cs.DB (Aug 18–21 day-buckets enumerated), Habr PostgreSQL hub [ru], blog.vonng.com [zh], blog.dalibo.com [fr], publickey1.jp [ja], Qiita [ja] · filtered out as marketing/ads: ~11 (a browser-IDE launch post, an operator-in-10-minutes tutorial that is mostly product, an "every AI agent needs Postgres" thought-leadership piece, three CRM-integration guides riding the Postgres tag, two managed-service comparison posts, a hosted-benchmark landing page, a conference-sponsor announcement) · out of window but adjacent: the Cassandra 6 ACID write-up (Aug 16) and Tailscale's SQLite WAL-reset post (Aug 11–12, covered last week).

Source note: browser reached via the Control_Chrome MCP server again (check it first — the claude-in-chrome extension is not the only path). Plain web_fetch worked for planet.postgresql.org, postgresql.org, commitfest.postgresql.org, mail-archive, arxiv.org, blog.dalibo.com and publickey1.jp once each domain was seeded by a search; habr, Reddit, Lobsters, HN Algolia and blog.vonng.com needed the browser. CommitFest: the per-CF activity log's ~100-row cap again ate the start of the window — the earliest reachable row was Mon 15:24, and the newest was Fri 03:48, so Fri–Sun flow is not represented either; the balance above is explicitly partial and the queue-total delta is the more reliable number. Mailing lists — solved. The official archive at postgresql.org/list/pgsql-hackers/<YYYY-MM>/ renders fully in a browser (it is only plain web_fetch that returns an empty shell — which is why four previous runs concluded "unreachable"). The month page carries a "Jump to day" strip of /list/pgsql-hackers/since/YYYYMMDD0000/ links; a same-origin fetch() of each day URL returns parseable HTML where the subject anchor lives in th[scope=row], not a td (the parsing trap that cost this run two attempts), with author and time in the two tds. /message-id/flat/<id> then gives whole threads. mail-archive's hackers mirror is still unseedable, and marc.info returns an empty body — neither is needed. Non-English: [ru] was the productive language by a wide margin (nine in-window Postgres posts on the Habr hub); [zh] blog.vonng.com newest post is Aug 14 and modb.pro remains unenumerable even in a browser; [fr] blog.dalibo.com's only in-window item was a newsletter announcement; [ja] publickey1.jp published seven in-window articles with zero database items and Qiita surfaced nothing in-window above the bar — all four verified quiet rather than unscanned. No CFP opened in-window, and no conference enters the 24–30-day horizon (Sep 16–22 is empty; Postgres Summit US lands in a later digest), so both conference sections are omitted. Nothing marked [unverified] this week — every claim above traces to a commit, a CommitFest record, a primary announcement, or the post's own measurements.