gpt4 book ai didi

c - 如何使用 libpq 执行异步查询

转载 作者:太空宇宙 更新时间:2023-11-04 03:13:01 29 4
gpt4 key购买 nike

我想以非阻塞方式使用 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() 检索套接字文件描述符。然而,需要相当多的胶水才能使其发挥作用。

关于c - 如何使用 libpq 执行异步查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54558801/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com