Released: 20 August 2026
EDB Postgres Distributed (PGD) 6.5.0 includes new features, enhancements, bug fixes, and a deprecation.
Note
PGD 6.5.0 requires EDB Postgres Extended 18.6.0 or later. PGD 6.0 through 6.4 aren't compatible with EDB Postgres Extended 18.6.0 or later and must stay on EDB Postgres Extended 18.1.0 through 18.5.x. If you're running Postgres 18, upgrade PGD and EDB Postgres Extended together to avoid landing on an unsupported combination. This change doesn't affect Postgres or EDB Postgres Advanced Server, which follow the usual minimum minor versions. See PGD compatibility for the full compatibility matrix.
Highlights
- Multi-threaded, up to 2.4x faster Connection Manager: runs on a multi-threaded engine that scales with CPU cores and processes routing updates off the traffic path, with new pooling modes yielding up to 60% further throughput gains.
- Built-in web UI for monitoring: every PGD node can optionally serve a monitoring web application covering cluster overview, connection management, replication, Raft, commit scopes, activity, query diagnostics, and error logs.
- Prometheus metrics endpoint: the PGD monitor can expose a
/metricsendpoint alongside the web UI and REST API, with PGD-native and optional Postgres statistics metric families. - Automatic node eviction: the new
evict_node_actionandevict_node_lag_bytesgroup options automatically part a node once its replication lag exceeds a configured threshold, preventing WAL-accumulation outages.
Features
| Description |
|---|
Added the |
Added validation when setting |
Added automatic node eviction based on replication lag.The new |
Added a built-in web UI and REST API for monitoring PGD clusters.Every PGD node now serves a monitoring web application as a background worker, enabled with |
Added a Prometheus metrics endpoint to the PGD monitor.The PGD monitor now exposes a |
Exposed an |
Enhancements
| Description | Addresses |
|---|---|
Connection Manager is now multi-threaded.Connection Manager previously handled all client traffic, pooling, and authentication on a single thread. It now runs on a multi-threaded engine, so connection capacity scales with the number of CPU cores. Configuration and routing updates are processed on a separate thread, off the traffic path. | |
Improved Connection Manager performance.Connection pooling and query forwarding are extensively optimized, delivering roughly 2.4 times higher throughput and lower per-query latency, especially under a high number of concurrent connections. New settings give finer control over pooling behavior. | |
Reduced | 35480, 51823, 61486 |
Quorum Commit now works with any transaction streaming mode.Quorum Commit previously required | |
CLI node setup no longer defaults to unwrapped TDE keys.Node setup on a TDE-enabled cluster previously defaulted to | 59715 |
| |
Improved CLI error handling to avoid panics.The CLI previously failed with raw panics and generic errors that gave little context for troubleshooting. Error handling now provides clearer, more actionable messages throughout the CLI. | |
Fixed empty transactions skipping commit scope validation unnecessarily.Empty transactions, those that produce no WAL, were previously routed through the full commit scope machinery, adding unnecessary latency and recording spurious commit decisions. PGD now treats empty transactions as having the local commit scope, bypassing group, quorum, and CAMO coordination. | |
Added a mixed-cluster Quorum Commit streaming compatibility warning.In a cluster containing both PGD 6.4 and 6.5 nodes during a rolling upgrade, PGD 6.5 nodes now warn if | |
Added detail to the error raised when replicated DDL fails due to a role-privilege divergence between nodes.When a node applied replicated DDL and hit | 102702 |
Added | |
Added | 82977 |
Improved error code assignment for user-actionable errors.Errors that previously defaulted to | |
Improved CLI error messages when BDR extension isn't installed.The | |
Added | |
|
Bug Fixes
| Description | Addresses |
|---|---|
Fixed node-join failure caused by an under-sized replication origin estimate during catch-up.The function | 56136 |
Fixed a crash caused by a race between a joining and a parting node.A joining node sometimes reached the | |
Fixed an internal lock leak on error while recording a Quorum Commit decision.An error recording a Quorum Commit decision, after | |
Fixed a possible commit/abort divergence on error while recording a Quorum Commit decision.An error while recording a Quorum Commit decision sometimes committed the transaction on the origin prematurely, before the decision was durably recorded elsewhere. PGD no longer commits the transaction early in this case. | |
Fixed commit decisions being dropped during commit-decision store maintenance.When the commit-decision store had a large backlog to catalog, a maintenance pass that hit its time limit paused and resumed later. One commit decision was skipped at each pause and resume boundary, leaving it unavailable for transaction resolution. Cataloging now resumes from the correct position, so no decision is dropped. | |
Fixed a Quorum Commit transaction hanging indefinitely when its origin node was parted mid-commit.A Quorum Commit transaction's client connection hung indefinitely when the originating node was parted from the cluster while the transaction's final commit or abort decision was still propagating to the rest of the cluster. The transaction now completes promptly and returns a clear error. | |
Fixed a performance regression affecting Commit At Most Once (CAMO) transactions introduced in 6.3.0 and 6.3.1.CAMO transactions experienced elevated commit latency and reduced throughput compared with earlier releases. The regression is now fixed, and the improvement applies automatically after upgrade. | |
Fixed a crash on dynamic partition creation for | 61769 |
Adopt recovered global locks lazily instead of reacquiring them at writer startup.A writer that restarted while holding a global lock previously reacquired every lock left in recovery state and bound it to itself, sometimes leaving parallel apply disabled after the lock was released. Writers now adopt an existing recovered lock for the same origin node instead, which also supports locks that apply on any streaming writer. | 58160 |
Fixed | |
Fixed | 63142 |
Fixed routing getting stuck in an infinite loop after a major network outage.A major network outage that disconnected and reconnected multiple nodes could leave routing stuck in an infinite loop, repeatedly logging | 63103 |
Fixed replication becoming permanently stalled due to a miscalculated apply delay in Quorum Commit and zero clock-skew configurations.When a node rejoined the cluster or recovered from a restart, the first transaction relayed through the catch-up path sometimes had no commit timestamp yet. The clock-skew check misread this absence as a multi-day clock discrepancy and paused replication for an effectively indefinite duration instead of a few milliseconds, wedging the affected subscription until it was manually restarted. The stall could occur with a Quorum Commit commit scope, or with | |
Fixed misreporting of Connection Manager group options as inheritable.Connection Manager group options, such as | 63103 |
Fixed a transaction reconciliation bug that could cause data divergence when a node's abort decision wasn't handled correctly.During reconciliation, if every node except the origin already had a transaction prepared, a node's decision to abort that transaction wasn't always handled correctly. Some nodes could then abort the prepared transaction while others committed it, diverging their data. | |
Nodes now wait to catch up on transactions from the previous write leader before accepting Quorum Commit transactions from a new one.Without this wait, consistency was already guaranteed for inserts and updates across a write leader change. Waiting for nodes to catch up first extends that guarantee to deletes, unique key updates, reinserting previously deleted or changed unique keys, and all DDL and DML commands. | |
Fixed a data inconsistency bug that could cause transactions to be missed with Quorum Commit.An aborted transaction could advance the origin on downstream nodes even when earlier transactions hadn't committed yet. If a crash occurred at that point, those earlier transactions, already committed on other nodes, could be skipped on this node. | |
Fixed critical global lock handling that could cause indefinite blocking.Heavy-weight session locks used for cluster-wide coordination could become misrouted to multiple writers or leak entirely, causing subsequent operations to block indefinitely and requiring a manual Postgres restart to resolve. PGD now routes all global lock messages for a transaction to the same writer, prevents unrelated transactions from being streamed to the global-lock writer, and maintains binding invariants to prevent lock leaks. | |
Fixed cross-subscription deadlock detection and recovery.The deadlock detector previously only reasoned about writers within the same subscription's writer group, so a deadlock spanning multiple subscriptions could pick a victim that wasn't actually holding the contended lock. The abort then freed nothing, the deadlock cycle reformed, and replication slowed severely or wedged permanently under concurrent apply. PGD now detects when deadlock participants span multiple subscriptions and restarts the affected subscription instead of retrying in place. | |
Fixed a snapshot restore crash with proxy routing enabled.Restoring a consensus snapshot that carried group routing entries crashed the backend with a null pointer dereference in the connection manager backoff reset logic. The crash occurred only with proxy routing enabled and affected | 62189 |
Fixed consensus worker crashes when a dropped leader appears in change events.The consensus worker crashed and looped when processing a committed | 62189 |
Fixed target-table-missing conflict logging on assert-enabled builds.When the apply process encountered a target-table-missing conflict, logging it to | 62064 |
Fixed Autopartition rules not being preserved on node rebuild.During | 62064 |
Fixed dropped columns causing | |
Fixed CAMO partner commit decisions occasionally not being redelivered after a receiver restart.A bug introduced in PGD 6.3 could, under certain timing conditions, cause some Commit At Most Once (CAMO) partner commit decisions to be missed when a receiver resends them to the origin after restarting. All relevant CAMO decisions are now reliably delivered on restart. | |
Fixed a duplicate-key error that could prevent the consensus worker from starting in containerized environments.The consensus worker seeded its own random number generator from the process PID and node ID, which could repeat across restarts in PID-namespaced or containerized environments, causing consensus journal request ID collisions and worker startup failures. The worker now relies on Postgres's own PRNG seeding, which has used a stronger entropy source since Postgres 12, resolving the collisions. | 61795 |
Fixed | |
Fixed a crash and an out-of-memory crash naming dynamic default RANGE and LIST subpartitions.
| |
Fixed | |
Fixed crashes in | 64521 |
Fixed | 61289 |
Fixed | |
Fixed | |
Fixed inconsistent | |
Fixed | |
Protect against creating a Default partition on an autopartitioned table.Autopartition doesn't support a Default partition. DDL that attempted to create one on an autopartitioned table is now rejected instead of leaving the table in an inconsistent state. | 61462 |
Fixed nested systable scans in the logical decoding path causing an | |
Fixed | |
Fixed the fast track writer not activating on a subgroup.Quorum Commit requires a fast track writer enabled on the node group, which happens automatically when a Quorum Commit commit scope is associated with the group. This activation previously didn't take effect for a subgroup. The fast track writer now activates correctly for subgroups too. | |
Optimized pruning of Raft consensus log tables.Pruning the Raft consensus catalogs ( | |
Prevent unsafe | |
Fixed | |
Fixed a write-leader switchover bug that could record the wrong node as the previous write leader.A write-leader switchover could record the wrong node as the previous write leader. PGD now records the correct previous write leader. | |
Fixed | |
Fixed high CPU utilization by the task manager on an idle cluster.A regression introduced in PGD 6.4 caused the task manager background worker to repeatedly execute a timestamp comparison query, using up to 30% CPU on an otherwise idle single-node cluster. | |
Fixed a duplicate-key error crashing the consensus worker after a node's own generation number diverged.A node whose own | 63835 |
Fixed | |
Added separate control of published and subscribed replication sets for a node.
| 62864 |
Fixed lagging nodes repeatedly erroring out on a Quorum Commit UPDATE after a DELETE from a different node.Under Quorum Commit, a node lagging behind a MAJORITY-participating pair could receive a DELETE and then an UPDATE for the same row out of their original commit order, since the two could arrive from different subscriptions. The UPDATE then errored out indefinitely with an UpdateMissing conflict. PGD now has the lagging node wait for a DELETE-capable transaction's upstream position before applying it, so DELETE and UPDATE apply in the correct order. | |
Fixed a segmentation fault replicating a table with a UUID column in a composite primary key.Replicating a table with multiple primary key columns, where a column other than the first is of type UUID, crashed the replicator background worker. | |
Fixed the writer crashing on an assertion failure during apply error recovery.The writer's abort and error path checked | |
Fixed the CAMO partner unnecessarily receiving a finish message for a transaction it already resolved.A cleanup step ran too early and discarded the per-transaction CAMO configuration before the commit-prepared or rollback-prepared callback could check it, so PGD always fell back to sending an explicit two-phase finish message to the CAMO partner. The partner then applied it unnecessarily, since it had already resolved the transaction through the pre-commit path. The configuration now survives until the finish callback has used it, removing this needless overhead from the CAMO hot path. | |
Fixed physical join failing when Postgres restarts on the joining node mid-join.In some cases, a Postgres restart on the joining node during a physical join caused the join to attempt a logical sync, resulting in errors. The fix prevents the physical join from falling back to logical join logic when a restart occurs mid-join. | 59904 |
Fixed resource leaks in | |
Fixed an intermittent | 59424 |
Reduced logging verbosity for some Quorum Commit messages that were logged as |
Deprecations
| Description |
|---|
PGD Essential (PGD-S) is no longer released as a separate package.Starting with this release, EDB is sunsetting PGD Essential as a distinct package variant. There's no PGD Essential 6.5.0 build. Use standard PGD packages from the |