我在间歇性挂起libpq的PQexec
函数时遇到问题
连接。在查看邮件列表之后,解决方案是使用
异步函数PQsendQuery
/PQgetResult
并实现自己的超时。
现在
我面临的问题是PQgetResult
需要多次调用,直到
它返回null
,然后您就知道它已完成。但是,我其余的人
应用程序期望每个查询有一个PQresult
对象。
所以我的问题是:
PQresult
? PQisBusy
和PQconsumeInput
等到所有在调用
PQgetResult
之前结果已经准备好了吗? 最佳答案
将归功于Laurenz Albe,归功于PostgreSQL邮件列表中的answered。
如果只有一条SQL语句,则只会得到一条PQresult
。如果您发送查询字符串,您将获得不止一个
有不止一项声明,例如
PQsendQuery(conn, "SELECT 42; SELECT 'Hello'");
将导致两个
PQresults
。您只能使用异步获取多个
PQresults
命令处理;相应的PQexec将返回仅执行最后一条语句的PQresult。
因此,您可以通过丢弃来获得与ojit_code相同的行为
除最后一个以外的所有
PQexec
。关于c - libpq-PQsendQuery等待完整结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13629237/