PostgreSQL PQstatus始终返回连接\u OK

PostgreSQL PQstatus始终返回连接\u OK,postgresql,libpq,Postgresql,Libpq,我正在尝试使用PQstatus检查PostgreSQL server的连接状态,即使服务器的电缆拔下,它也始终会返回连接状态。假设您的问题是为什么会发生这种情况,并且回答它的预期行为是不够的 PQstatus的文档不保证测试连接,例如,向服务器发送任何内容并等待回答。它只返回客户端库已知的连接状态。如果1连接出现问题,2客户端库有机会注意到,则此状态可能会更改 如果您希望在拔下电缆时注意到,请定期向服务器发送类似于SELECT 1的内容。UPD:libpq中还有一个pg_ping函数,它做同样的

我正在尝试使用PQstatus检查PostgreSQL server的连接状态,即使服务器的电缆拔下,它也始终会返回连接状态。

假设您的问题是为什么会发生这种情况,并且回答它的预期行为是不够的

PQstatus的文档不保证测试连接,例如,向服务器发送任何内容并等待回答。它只返回客户端库已知的连接状态。如果1连接出现问题,2客户端库有机会注意到,则此状态可能会更改

如果您希望在拔下电缆时注意到,请定期向服务器发送类似于SELECT 1的内容。UPD:libpq中还有一个pg_ping函数,它做同样的事情,而不需要无意义的查询

即使对于底层TCP层,拔下电缆通常也不会中断连接。系统永远不知道它是否会被插回去,所以这是不明智的。有一个SooKeEpEn活性选项,但它通常不考虑连接过早中断。例如Linux上的默认是在3小时不活动之后发送KePiaPro探针。


即使连接断开,libpq也应该尝试读取或写入套接字,以将其检测为错误。除非你以某种方式让它发生——例如,按照上面的建议执行一个查询,否则这种情况不会发生。

假设你的问题是为什么会发生这种情况,并且回答它的预期行为是不够的

PQstatus的文档不保证测试连接,例如,向服务器发送任何内容并等待回答。它只返回客户端库已知的连接状态。如果1连接出现问题,2客户端库有机会注意到,则此状态可能会更改

如果您希望在拔下电缆时注意到,请定期向服务器发送类似于SELECT 1的内容。UPD:libpq中还有一个pg_ping函数,它做同样的事情,而不需要无意义的查询

即使对于底层TCP层,拔下电缆通常也不会中断连接。系统永远不知道它是否会被插回去,所以这是不明智的。有一个SooKeEpEn活性选项,但它通常不考虑连接过早中断。例如Linux上的默认是在3小时不活动之后发送KePiaPro探针。


即使连接断开,libpq也应该尝试读取或写入套接字,以将其检测为错误。除非您以某种方式执行查询,否则不会发生这种情况。

您也可以只发送一个空字符串作为查询。但其中还有一个更重要的部分——测试连接的想法相当愚蠢,因为在测试连接和运行真正的查询之间,连接可能会消失。不测试连接,只使用它们,如果它们失败,请准备在打开事务后重试所有操作。您也可以只发送一个空字符串作为查询。但其中还有一个更重要的部分——测试连接的想法相当愚蠢,因为在测试连接和运行真正的查询之间,连接可能会消失。不要测试连接,只需使用它们,如果它们失败,请准备在打开事务后重试所有操作。