← All digests

DBMS Weekly — 2026-07-20 (week of 2026-07-20–2026-07-26)

A quiet week for announcements — postgresql.org posted nothing new after PG19 Beta 2 (Jul 16), so the story is in the commit stream and the community. Beta-stabilization work dominated core: the concurrent sequence-refresh race that was reverted last week got a proper fix, Peter Geoghegan kept hardening empty-nbtree predicate locking, and Robert Haas closed a way to wedge the WAL summarizer. Meanwhile the week's loudest debates were both about Postgres at scale — a startup survival guide and a "does LISTEN/NOTIFY really scale?" rebuttal.

PostgreSQL

  • Concurrent sequence-refresh race fixed — take two — resolves last week's cliffhanger: after the "reject concurrent refreshes" approach was reverted for buildfarm flakiness, this fix instead stops any running sequencesync worker before ALTER SUBSCRIPTION … REFRESH SEQUENCES resets sequences to INIT, closing a silent-lost-refresh race (a worker's stale publisher value could overwrite the reset). Race-free because AlterSubscription already holds AccessExclusiveLock. Reported by Noah Misch; backpatched to 19. (Amit Kapila · pgsql-committers) [committed]
  • Another empty-nbtree SSI race closed — the earlier fix (f9b7fc65) only covered _bt_search; scans without useful insertion scankeys return early via _bt_endpoint, which still didn't recheck an empty index, so a serializable reader could miss concurrently inserted tuples while the writer never saw its predicate lock. Backpatched to 14, alongside a week of new nbtree test coverage (backwards scans, empty-index predicate locking, _bt_set_startikey row compares). (Peter Geoghegan · pgsql-committers) [committed]
  • Guard against a stuck WAL summarizer — the summarizer was passed the latest end-of-WAL even when reading a historic timeline; with a corrupted or hand-renamed .partial file in the archive it could keep retrying an invalid record and wedge, breaking incremental backup. Backpatched to 17. Reported by Fabrice Chapuis, analyzed by Thom Brown (credited "using claude"). (Robert Haas · pgsql-committers) [committed]
  • JSON_ARRAY(subquery) dropped its FORMAT clause on deparse — more than cosmetic: a view storing JSON_ARRAY(subquery FORMAT JSON) would deparse without the FORMAT, and FORMAT JSON changes the result (a text value treated as already-formatted JSON vs. a quoted string). Fixed by recording the input FORMAT for ruleutils; catversion bump, backpatched to 19. (Chao Li, committed by Richard Guo · pgsql-committers) [committed]
  • Logical replication hardening — a cluster of subscriber-side fixes landed: subscription conninfo is now re-validated on owner change; apply workers ignore default_transaction_* GUCs that could otherwise derail them (msg47464); and sequence synchronization now rejects pre-PostgreSQL-19 publishers rather than misbehaving. (Fujii Masao, Amit Kapila · pgsql-committers) [committed]
  • REPACK keeps getting polished in beta — PG19's new in-core online-rewrite command drew more cleanup this week (partitioned-table repack code refactor, an LSN-format fix in the REPACK worker's debug output), a reminder that CONCURRENTLY mode is still settling before GA. (Álvaro Herrera · pgsql-committers) [committed]
  • pg_dump: restore of partitions with exclusion constraints — fix for restoring partitions carrying exclusion constraints. (Álvaro Herrera · pgsql-committers) [committed]
  • Master grab-bagpsql \l+ now shows database size to pg_read_all_stats (Fujii Masao); a planner micro-opt skips get_relids_in_jointree() when there are no PlaceHolderVars (Richard Guo); pg_control_checkpoint() exposes logical-decoding status (Masahiko Sawada); a run of pgstats out-of-memory hardening (Michael Paquier); and a doc note that granting TRIGGER or REFERENCES is a privilege-escalation risk (Robert Haas). [committed]

Reading — REPACK & MVCC

  • Every UPDATE Leaves a Ghost: MVCC, Bloat, and VACUUM in PostgreSQL — MVCC/dead-tuple/bloat walkthrough with runnable psql examples; the "why you eventually need to rewrite a table" backstory to REPACK. (Jan Nidzwetzki, Etienne Berube, Ahmed Darwich · planetscale.com) [vendor blog — substantive]
  • What's new in Postgres 19 — feature roundup centered on REPACK (CONCURRENTLY), the in-core online rewrite that folds VACUUM FULL and CLUSTER into one command with a non-blocking mode. (Ahmed Darwich · planetscale.com) [vendor blog]

Community pulse

  • The startup's Postgres survival guide — Hatchet's Alexander Belanger distills two years of production Postgres into one document — schema design, the query planner as "the leakiest abstraction", autovacuum tuning and txid-wraparound, FOR UPDATE SKIP LOCKED queues, partitioning, and trigger-based large-table migrations (with a nod to PG19 REPACK … CONCURRENTLY); the 235-comment thread is the real scaling-tactics debate. (Hacker News · 521 pts, 235 comments)
  • Postgres LISTEN/NOTIFY actually scales — DBOS rebuts the popular "NOTIFY doesn't scale" post: the culprit is the global commit-order lock NOTIFY holds through fsync, which serializes commits and defeats group commit (capping them at ~2.9K writes/s with no visible resource saturation); buffering and batching notifications, with a low-frequency polling fallback, gets them to 60K writes/s at 15–100 ms latency. Notes the PG19 NOTIFY patch only helps the many-distinct-channels case, not this bottleneck. (Hacker News · 368 pts, 82 comments)

Wider DBMS & distributed data

  • DuckPGQ: SQL/PGQ property-graph queries in DuckDB — a DuckDB community extension implementing the SQL/PGQ graph-query standard — the same standard PostgreSQL 19 is adopting via GRAPH_TABLE — making cross-engine "how should SQL do graphs" a live question; resurfaced on HN this week. (duckpgq.org · Hacker News · 63 pts)
  • PostgresBench: the performance cost of High Availability on managed Postgres — a benchmark isolating how enabling HA (synchronous replication) changes throughput/latency across managed Postgres offerings; useful framing even read skeptically as a vendor benchmark. (Lionel Palacin, Sai Srirampur, Andrey Chudnovskiy · clickhouse.com) [vendor blog]

Research & cutting edge

International (non-English sources)

  • MariaDB → PostgreSQL with zero downtime via Debezium CDC — a detailed migration war story: why one-shot converters don't work on a live shop DB (pgloader's heap exhaustion and 63-char/duplicate-index-name conflicts; pg_chameleon silently dropping conflicting tables), and how Debezium + Kafka Connect gives an initial snapshot plus continuous binlog streaming so the cutover lag drops to seconds. Real footguns: ~15 tables with no id PK each need their own sink connector (and must be excluded from the general one or it goes FAILED), ~50 GB of Kafka disk for the JSON, and timezone/schema-evolution gotchas — all wrapped in an idempotent Ansible role. (WrongName · habr.com) [ru] (orig: «Миграция MariaDB → PostgreSQL без даунтайма … через Debezium CDC»)

Upcoming events

  • Hyderabad PGDays 2026 — Hyderabad (JNTUH), Aug 20–21 — community-run two-day event (a Day-1 training block + two days of talks across Postgres/AI/Dev tracks), now ~25 days out with tickets live. Internals picks:
    • Pinning the Plan That Works: pg_plan_advice in PostgreSQL 19 (Avinash, Michael) — PG19's new plan-management mechanism for forcing a chosen plan; timely if you fight planner regressions (and pg_plan_advice got a parser fix in-tree this very week).
    • Logical replication theory and concepts (Ashutosh Bapat) — foundations from a long-time replication hacker; good grounding before touching decoding/apply internals.
    • Under the Hood of PostgreSQL: the shared-memory architecture behind MVCC & concurrency (Shameer Bhupathi) — how shared buffers, locks and snapshots fit together.
    • Plus a hands-on "PostgreSQL Internals & Hacking 101" training and Kevin Biju's "Exploring the Postgres Codebase: Reliable C in Practice".

~22 items · sources scanned: pgsql-committers via mail-archive (thread index fresh through Jul 26; msg47430–47528 ≈ this week's commits), postgresql.org news + events (nothing posted after Jul 16), Planet PostgreSQL / PlanetScale blog, arXiv cs.DB recent (fresh; Jul 21–24 in-window), ClickHouse blog, live HN via the Algolia API (points/comments verified in-window), Habr PostgreSQL hub [ru] (several in-window posts), Hyderabad PGDays schedule (confbase) · filtered out as marketing/ads: ~7 · out-of-window: many (incl. the May minor releases, Oracle 26ai GA (Jan), DuckDB 1.5.2 (Apr), ClickHouse 26.6 & Silk (≤Jul 16), Scaling Postgres 414 & the dbi REPACK post (both Apr), and the Jul 6–14 extension releases).

Source note: this run used the connected browser to fill what plain fetch couldn't. Community pulse is ranked from live HN Algolia data (verified points/comments in-window); the two threads dedupe cleanly against the rest of the digest. International — the Habr PostgreSQL hub had several in-window posts this week (a Debezium migration report, a PG19 REPACK/SQL-PGQ/autovacuum preview, an auto-partitioning cron job, a data-aging piece from Tantor); the standout migration story is featured. A Chinese check (blog.vonng.com) failed with a connection reset, and ja/fr were not scanned this pass. Mailing lists — pgsql-hackers/-bugs/-performance archives were still not usably reachable, so core coverage is the pgsql-committers stream (what actually landed). CommitFest — the app served stale caches again (a /59/ snapshot of 3 committed / 287 total is an early-July cache, inconsistent with the Jul 13 reading of 153 / 613), so weekly flow is not measurable; commit ground-truth shows heavy activity in logical replication, nbtree SSI hardening, REPACK polish, and pgstats OOM-hardening. No CFP opened in-window.