我正在使用PostgreSQL C API。读取documentation时,它说明当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一次。
最佳答案
我认为您需要的是PQsetSingleRowMode
,让PQgetResult
每次都返回一行。
来自http://www.postgresql.org/docs/9.2/static/libpq-single-row-mode.html
查看示例代码:
https://github.com/markokr/libpq-rowproc-demos/blob/master/demo-onerow-async.c
关于sql - Postgres异步API检测查询结束,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13663151/