Pgpool-II 4.7.2 and Older Branches Released to Fix Watchdog Race Conditions and SSL Leaks
The Pgpool-II project just pushed out maintenance releases across five branches, including 4.7.2, 4.6.7, 4.5.12, 4.4.17, and 4.3.20. This update targets the exact cluster synchronization bugs that keep database administrators awake at night. System engineers managing PostgreSQL connection pooling should check their health check probes and watchdog configurations before applying the patches.
Watchdog Synchronization and Pgpool-II Clean Startup Fixes
The simultaneous restart bug in the watchdog module was the kind of silent failure that breaks high availability setups without warning. When all nodes restart at the same time, standby nodes overwrite a valid primary_node_id with an initial sentinel value and freeze indefinitely. The patch keeps the local node identifier intact when the leader reports that initial state. This matters because a stuck watchdog means the cluster cannot fail over, and manual intervention becomes the only option. The update also closes listening sockets before forking child processes. Inherited sockets from previous runs often block port binding on the next startup, which explains why some administrators swear by cold reboots instead of proper service restarts.
Aborted Transaction Handling and Debug Logging Overhaul
Several commits address how the middleware handles aborted database transactions and debug output. The project removed a call to pool_get_transaction_isolation() from the debug logging path in where_to_send_main_replica(). That function internally executes queries, which triggers fatal errors when running inside an already aborted transaction. The update also allows empty queries to pass through check_transaction_state_and_abort() without raising errors, which straightens out ORM health checks that rely on rollback statements. Debug logs accidentally bumped to LOG level in pcp_proc_info and show pool_pools got downgraded to DEBUG5. Keeping debug output at the right level prevents disk space exhaustion and keeps performance monitoring tools from choking on verbose output.
Query Cache Invalidation and Routing Corrections
PostgreSQL 15 introduced the MERGE statement, but the query cache module in earlier versions never learned to invalidate cached results when that command runs. The patch fixes this oversight so stale cache entries stop serving outdated data. Routing errors for SET transaction_read_only = 0 also get corrected, preventing queries from accidentally hitting standby nodes when they should go to the primary. A session local relation cache bug prevents temporary table metadata from leaking into shared cache, which stops subsequent queries from routing incorrectly. The SSL module finally gets its memory leak fixed in load_dh_file() when invalid DH parameters slip through. Unreleased memory in connection handling adds up quickly under heavy load, so that patch is a quiet but necessary fix.
You can download the new releases from here. Keep your monitoring dashboards handy during the upgrade window, and test failover behavior before pushing to production.
