diff --git a/dbutils.c b/dbutils.c index c8f27edf..f8c91657 100644 --- a/dbutils.c +++ b/dbutils.c @@ -3847,6 +3847,21 @@ is_server_available_params(t_conninfo_param_list *param_list) } + +/* + * Simple throw-away query to stop a connection handle going stale + */ +void +connection_ping(PGconn *conn) +{ + PGresult *res = PQexec(conn, "SELECT TRUE"); + + PQclear(res); + return; +} + + + /* ==================== */ /* monitoring functions */ /* ==================== */ diff --git a/dbutils.h b/dbutils.h index 93fbf019..8d78ca71 100644 --- a/dbutils.h +++ b/dbutils.h @@ -466,6 +466,7 @@ int wait_connection_availability(PGconn *conn, long long timeout); /* node availability functions */ bool is_server_available(const char *conninfo); bool is_server_available_params(t_conninfo_param_list *param_list); +void connection_ping(PGconn *conn); /* monitoring functions */ void diff --git a/repmgrd-physical.c b/repmgrd-physical.c index a70c8172..e8db03f4 100644 --- a/repmgrd-physical.c +++ b/repmgrd-physical.c @@ -1070,7 +1070,13 @@ loop: if (PQstatus(primary_conn) == CONNECTION_OK && config_file_options.monitoring_history == true) + { update_monitoring_history(); + } + else + { + connection_ping(local_conn); + } if (got_SIGHUP) {