如何使用 libpq 执行异步查询
How to execute an async Query with libpq
我想以非阻塞方式使用 libpq 执行 SQL 查询。
因此,我希望在我的查询执行完毕时得到通知。
据我了解,如果我使用异步 api.
,则 libpq 支持此功能
使用 PQsendQuery
函数,我可以将查询发送到后端,使用 PQgetResult
函数,我可以检索结果。
我多次调用PQsendQuery
函数而没有等待
上一个完成。
现在我有以下问题:
- 如何将我稍后要提取的结果与
PQgetResult
到对应查询?
- 是否有使用回调而不是 PQgetResult 的方法?
- 有没有办法在事件循环(例如 libevent)中 运行?
您误解了这里的内容:PQsendQuery()
发送了一个异步查询,意思是该命令在结果可用之前不会阻塞。但是,您可以不在读取所有结果之前再次调用PQsendQuery()
!
来自联机帮助页:
After successfully calling PQsendQuery, call PQgetResult one or more times to obtain the results. PQsendQuery may not be called again (on the same connection) until PQgetResult has returned a null pointer, indicating that the command is done.
如联机帮助页所示,您必须打开多个连接才能 运行 多个并发查询。然后将不同的结果与不同的数据库句柄相关联。
PostgreSQLc async io api不提供回调机制;然而,这并不难建立自己。可以使用 libevent,因为您可以使用 PQsocket()
检索套接字文件描述符。然而,需要相当多的胶水才能使其发挥作用。
我想以非阻塞方式使用 libpq 执行 SQL 查询。 因此,我希望在我的查询执行完毕时得到通知。
据我了解,如果我使用异步 api.
,则 libpq 支持此功能使用 PQsendQuery
函数,我可以将查询发送到后端,使用 PQgetResult
函数,我可以检索结果。
我多次调用PQsendQuery
函数而没有等待
上一个完成。
现在我有以下问题:
- 如何将我稍后要提取的结果与
PQgetResult
到对应查询? - 是否有使用回调而不是 PQgetResult 的方法?
- 有没有办法在事件循环(例如 libevent)中 运行?
您误解了这里的内容:PQsendQuery()
发送了一个异步查询,意思是该命令在结果可用之前不会阻塞。但是,您可以不在读取所有结果之前再次调用PQsendQuery()
!
来自联机帮助页:
After successfully calling PQsendQuery, call PQgetResult one or more times to obtain the results. PQsendQuery may not be called again (on the same connection) until PQgetResult has returned a null pointer, indicating that the command is done.
如联机帮助页所示,您必须打开多个连接才能 运行 多个并发查询。然后将不同的结果与不同的数据库句柄相关联。
PostgreSQLc async io api不提供回调机制;然而,这并不难建立自己。可以使用 libevent,因为您可以使用 PQsocket()
检索套接字文件描述符。然而,需要相当多的胶水才能使其发挥作用。