# HG changeset patch # User Olaf Wintermann # Date 1765126727 -3600 # Node ID 337cda289f3480b1ee87092df548069eae13c11c # Parent be69e8196cc917ed34ebb1bd4b61b5b598833aaf check pg connection when preparing the resource diff -r be69e8196cc9 -r 337cda289f34 src/server/daemon/resourcepool.c --- a/src/server/daemon/resourcepool.c Sun Dec 07 17:50:52 2025 +0100 +++ b/src/server/daemon/resourcepool.c Sun Dec 07 17:58:47 2025 +0100 @@ -201,8 +201,7 @@ } if(err) { - // err == 1 caused by OOM - log_ereport(LOG_FAILURE, "resourcepool_lookup: OOM"); + log_ereport(LOG_FAILURE, "resourcepool_lookup error"); // cleanup resourcepool_destroy_resource(resource); resource = NULL; diff -r be69e8196cc9 -r 337cda289f34 src/server/plugins/postgresql/resource.c --- a/src/server/plugins/postgresql/resource.c Sun Dec 07 17:50:52 2025 +0100 +++ b/src/server/plugins/postgresql/resource.c Sun Dec 07 17:58:47 2025 +0100 @@ -118,6 +118,16 @@ } int pg_resourcepool_prepare(PgResourcePool *pg, PgResource *res) { + if(PQstatus(res->connection) != CONNECTION_OK) { + log_ereport(LOG_WARN, "pg_resourcepool_prepare: connection not ok"); + // try to recreate the resource + PQfinish(res->connection); + res->connection = PQconnectdb(pg->connection); + if(pg_check_connection(LOG_FAILURE, pg->name, res->connection)) { + return 1; + } + } + PGresult *result = PQexec(res->connection, "BEGIN"); PQclear(result); // TODO: handle error return 0;