OffNet Newsroom

Daily topic roundup

Database Technology

Wednesday, September 23, 2026 · 7 stories, curated & summarized — click any story for the source.

ClickHouse released WalShadow, a tool that replicates PostgreSQL data by reading the physical WAL stream rather than using logical decoding. It decodes heap records directly from the byte stream and writes them as ClickHouse-native blocks. This approach bypasses standard logical replication mechanisms to achieve data synchronization.

  • Bypasses logical decoding overhead by reading raw physical WAL bytes
  • Decodes heap records internally to generate ClickHouse-native block formats
  • Offers an alternative replication path for Postgres to ClickHouse workflows
  • Requires careful monitoring as it operates outside standard logical replication
HOW IT WORKSWalShadow Replication Pipeline1Read raw physical WAL bytes2Decode heap records directly3Generate ClickHouse-native blocks4Write synchronized data blocks
PostgreSQL Releases databasereleases

PostgreSQL 19 Beta 4 released for testing

The PostgreSQL global development group has published the fourth beta release for version 19. This pre-release build allows developers and DBAs to validate compatibility and performance characteristics of upcoming features before the final stable launch. It serves as an incremental step in the PostgreSQL 19 release candidate cycle.

  • Test application compatibility against PostgreSQL 19 beta changes now.
  • Validate performance benchmarks for new features in this beta build.
  • Monitor community feedback for regressions before the final release.
  • Use this build for non-critical staging environments only.
  • Prepare upgrade plans assuming stable release timing follows beta cycle.

Christophe Pettus highlights the confusing naming of max_pred_locks_per_transaction, noting it behaves more like max_locks_per_transaction by being a per-backend table size rather than a hard transaction limit. The post explains that the table holds entries primarily belonging to active transactions, distinct from its namesake's scope. This clarification addresses potential misunderstandings about resource allocation for predicate locking.

  • max_pred_locks_per_transaction is per-backend, not per-transaction limit
  • Naming is confusing due to similarity with max_locks_per_transaction
  • Table holds entries mostly from active transactions
  • Check backend slot allocation for predicate locks
  • Clarifies resource usage for heavy transaction workloads

Chris van Eijk outlines six critical choices for building multi-tenant SaaS on PostgreSQL, covering isolation models, Row Level Security, indexing strategies, monetary data types, tenant restoration, and large-scale migration. The analysis provides measured comparisons to help engineers select the right architecture for their specific scale and compliance needs. It emphasizes practical trade-offs rather than theoretical best practices.

  • Choose isolation models based on strict compliance vs. resource efficiency trade-offs.
  • Implement RLS carefully to balance security overhead with query performance.
  • Select indexing strategies that support multi-tenant filtering without bloat.
  • Use appropriate money types to avoid precision issues in financial data.
  • Plan restoration and migration paths early to minimize tenant downtime.
CHECKLISTMulti-tenant SaaS Architecture ChecklistSelect isolation models based on compliance needsImplement RLS to balance security and performanceChoose indexing strategies to avoid multi-tenant bloatUse correct money types for financial precisionPlan restoration paths to minimize downtime

PostgreSQL 19 resolves a long-standing issue where Chinese (zh_CN) error message catalogs were completely outdated for seven years. The update revives these translations, which were nearly removed from the release due to lack of maintenance. This change effectively ends the previous advisory advising users not to set their locale to zh_CN.

  • PostgreSQL 19 restores functional Chinese error messages after a seven-year stagnation.
  • The zh_CN locale restriction is lifted, allowing proper localized error reporting.
  • Maintenance backlog was cleared quickly, resolving a critical localization gap.
  • Users relying on Chinese interfaces can now expect accurate diagnostic strings.
Planet PostgreSQL database

PostgreSQL RLS: 5 Silent Failure Modes in v17

Chris van Eijk analyzes how Row-Level Security, though easy to enable, often fails silently in PostgreSQL 17. The article details five specific scenarios where tenant data leaks despite configuration, highlighting edge cases in policy enforcement. This review serves as a practical audit guide for ensuring strict multi-tenancy isolation.

  • Enabling RLS is trivial, but verifying its persistence against policy changes is critical.
  • Five distinct leak paths exist where tenant boundaries are silently breached in v17.
  • Audit existing policies for edge cases that bypass row-level filtering mechanisms.
  • Assume RLS is broken until specific edge-case scenarios are explicitly tested.
CHECKLISTAudit RLS Policies in v17Verify persistence against policy changesTest five distinct leak pathsAudit edge cases bypassing filtersAssume RLS is broken initially

Dimitri Fontaine reflects on the decade since Postgres 10 introduced logical replication, contrasting it with the complex, multi-daemon setups of Londiste and PgQ. He notes that every release since 2017 has replaced manual plumbing with declarative SQL, simplifying data distribution. This article launches a series exploring modern use-cases and the evolution of the feature set.

  • Logical replication has replaced complex trigger-based queues like PgQ and Londiste with native SQL commands.
  • Postgres 19 marks the 10th anniversary of this feature, highlighting a decade of incremental stabilization.
  • The shift reduces operational overhead by eliminating Python daemons and per-node ticker processes.
  • New series will cover practical use-cases now that the underlying plumbing is standardized.
HOW IT WORKSPostgres Logical Replication Evolution1Complex trigger-based queues2Manual daemon plumbing3Declarative SQL commands4Standardized distribution
↑