我正在使用 PostgreSQL C API。阅读文档,它指出当 PQgetResult 返回 NULL 时查询已完成,如果 PQisBusy 不返回 0,则 PQgetResult 将阻塞。但是,如果没有更多输入,PQisBusy 将返回 1,因此我无法调用 PQgetResult 并获取 NULL。因此我不知道查询是否结束。有没有其他方法可以知道查询是否完成?我误解了异步 API 吗?
- - 编辑 - - -
C代码的基本思想是:
PQsendQuery(conn, query)
while(true)
{
PQconsumeInput(conn)
if(PQisBusy(conn) == 0)
{
PGresult* res = PQgetResult(conn);
if(res)
{
//print result
}
else
{
//res == NULL
//indicates query is over
break;
}
}
}
结果将被打印,但循环永远不会终止。因为 PQisBusy 只返回 0 一次。