Учитывая следующий libpq код:Postgres libpq как сказать, если соединение было прервано
PGconn * internalConnection = PQconnectdb("my connection string");
if (PQstatus(internalConnection) != CONNECTION_OK)
{
// return error on failure
}
// Kill all connections
if(0 == PQsendQuery(internalConnection, "SELECT pid, (SELECT pg_terminate_backend(pid)) as killed from pg_stat_activity"))
{
// return error on failure
}
Что делает следующее:
- Делает подключение к серверу.
- Выполняет запрос, убивая все соединения (включая это соединение).
Как сообщить клиентской стороне, что соединение было убито? Если я запустить снова следующее:
PQstatus(internalConnection)
Я до сих пор получает CONNECTION_OK
как мой результат.
Используя API MySQL, я могу проверить mysql_ping
на соединение, чтобы узнать, все ли открыто соединение, но в Postgres похоже, что подобный вызов метода (который я мог найти) не похож.
Любые предложения относительно того, как я могу определить с клиентской стороны, если соединение было убито?
«PQconsumeInput» работает для меня в Ruby ('conn.consume_input') в цикле while-sleep. Чтобы правильно обрабатывать вещи, я должен поймать исключение «PG :: ConnectionBad». Я мог бы «вручную» проверить сокет FD, но это кажется немного чище. Большое спасибо за ответ на этот вопрос (хотя я и не спрашивал) – Otheus