M CHANGELOG.rst => CHANGELOG.rst +3 -0
@@ 8,6 8,9 @@ Version 8.0
the user customize the address to use when connecting to a server.
See https://lab.louiz.org/louiz/biboumi/issues/3273 for more details.
- Messages id are properly reflected to the sender
+- We now properly deal with a PostgreSQL server restart: whenever the
+ connection is lost with the server, we try to reconnect and re-execute the
+ query once.
Version 7.2 - 2018-01-24
========================
M src/database/postgresql_statement.hpp => src/database/postgresql_statement.hpp +12 -2
@@ 92,7 92,7 @@ class PostgresqlStatement: public Statement
private:
private:
- bool execute()
+ bool execute(const bool second_attempt=false)
{
std::vector<const char*> params;
params.reserve(this->params.size());
@@ 113,7 113,17 @@ private:
const char* original = PQerrorMessage(this->conn);
if (original && std::strlen(original) > 0)
log_error("Failed to execute command: ", std::string{original, std::strlen(original) - 1});
- return false;
+ if (PQstatus(this->conn) != CONNECTION_OK && !second_attempt)
+ {
+ log_info("Trying to reconnect to PostgreSQL server and execute the query again.");
+ PQreset(this->conn);
+ return this->execute(true);
+ }
+ else
+ {
+ log_error("Givin up.");
+ return false;
+ }
}
return true;
}