我想以非阻塞方式使用libpq执行SQL查询。 因此,我想在查询执行完成时收到通知。
据我了解,如果我使用异步api,那么libpq支持此功能。
使用PQsendQuery
函数,我可以将查询发送到后端,使用PQgetResult
函数,我可以检索结果。
我多次调用PQsendQuery
函数,而无需等待
上一个要完成。
现在我有以下问题:
PQgetResult
到相应的查询?答案 0 :(得分:1)
您在这里误解了某些情况:PQsendQuery()
发送一个异步查询,这意味着该命令在结果可用之前不会阻塞。但是,在读取所有结果之前,您可能不再次调用PQsendQuery()
!
从联机帮助页:
成功调用PQsendQuery后,请调用PQgetResult一次或多次以获取结果。 在相同的连接上,可能不会再次调用PQsendQuery (在同一连接上),直到PQgetResult返回一个空指针,表明该命令已完成。
如联机帮助页所示,您将必须打开多个连接才能运行多个并发查询。然后将不同的结果与不同的数据库句柄相关联。
PostgreSQLc异步io api不提供回调机制。但是,这并不难构建自己。可以使用libevent,因为可以使用PQsocket()
检索套接字文件描述符。但是,要使它起作用,需要大量胶水。