PostgreSQL 19 Beta 4 Is a Lesson in Operational Contracts
PostgreSQL’s fourth beta trims unfinished features and refines REPACK and WAIT. For application developers, the interesting questions are maintenance costs and what a replica read promises.

A database feature becomes interesting to an application developer when it changes a promise the application can make. Can maintenance happen while customers are using the service? Can a read from a replica show the write the customer just completed?
PostgreSQL’s September 24 Beta 4 announcement gives both questions a timely context. It includes fixes for the new REPACK and WAIT commands, while removing several features from this release, including SQL/PGQ support and partition merge/split operations. The project frames those removals around reliability and a predictable release schedule.
This is a beta, not a claim that PostgreSQL 19 is ready for production. The announcement places a release candidate in early October and says general availability may follow in October, depending on testing. My reading is that the useful task now is to test operational assumptions against representative workloads.
Reclaiming space still costs something
The development documentation for REPACK describes rewriting a table to reclaim storage. With its concurrent option, reads and writes can continue during much of that work, but an exclusive lock is still needed for the file swap. Temporary storage is also required for the rewritten table and indexes.
That changes the maintenance conversation without eliminating it. If a table has grown much larger than its live data, an online rewrite can be attractive. But the team still needs to budget disk headroom, I/O, and the final lock acquisition. “Concurrent” is not a synonym for “free.”
For a heavily updated table, I would measure more than total completion time. Watch application latency, write volume, replication behavior, and available disk throughout the operation. Rehearse with long-running transactions present, because a quiet staging database can make a production maintenance plan look deceptively simple.
These are proposed tests, not measured results. Their value is that they connect a command to the service conditions under which it will run.
A replica read needs a precise promise
The WAIT documentation describes waiting for WAL to reach a target log sequence number. The default standby replay mode waits for changes to be applied, and the command supports a timeout. A target captured at or after the relevant commit can support a read-your-writes flow.
Imagine updating an account preference on the primary and immediately reading it from an asynchronous replica. If the replica is behind, the customer may see the old value. Sleeping for an arbitrary duration merely guesses when replication will catch up.
A position-based wait expresses the requirement more directly: do not run the dependent read until the replica has replayed the required point. In conceptual application flow:
Commit the write on the primary.
Capture a suitable WAL position after that commit.
Wait for replay of that position on the selected replica, with a bounded timeout.
Run the read only after success; otherwise use an explicit fallback.
The position is not a token that can be passed blindly forever. The documentation warns that numeric LSN comparisons do not identify the WAL timeline. Promotion and failover therefore require the application to reassess the target. A connection pool also has to keep the wait and subsequent read on the intended server.
Decide the fallback before adding the wait
For an interactive preference screen, my default design would be to fall back to the primary when a bounded replica wait cannot succeed. Other workloads may choose to report delay or retry later. The important part is making that choice before production traffic exposes it.
Add observability for successful waits, timeouts, fallback reads, and wait duration. A consistency mechanism that silently turns most reads into primary reads can defeat the reason for adding replicas. Equally, a generous timeout can move replication lag directly into user-visible latency.
Test the awkward cases: a paused replica, a broken connection, a promotion during the operation, and an expired request deadline. The beta documentation also constrains where WAIT can execute within transactions, so test the sequence through the real driver and pool rather than only in an interactive SQL session.
A useful beta evaluation
I would use disposable staging data, preserve a baseline from the supported production version, and pick one representative maintenance case plus one replica-dependent user journey. Record correctness and resource behavior, not just whether each command completes.
PostgreSQL 19’s beta cycle is a reminder that operational features are contracts with conditions. REPACK asks us to understand maintenance resources and locks. WAIT asks us to define consistency, deadlines, and failover behavior. Testing those conditions now is more useful than assuming a new command will automatically make the application more reliable.