【问题标题】:How to use libpqxx to receive notifications from the PostgreSQL database?如何使用 libpqxx 接收来自 PostgreSQL 数据库的通知?
【发布时间】:2016-07-19 11:31:19
【问题描述】:

我正在编写 C++ 应用程序,它需要通过 libpqxx 库接收来自 PostgreSQL 的数据更改通知。但它的tutorial 不包括这样的用例。通知必须在多个渠道上接收。此外,我使用boost::asio 作为网络库,如果可能的话,我最好使用带有异步回调的 asio 套接字类来通知事件,而不是轮询原始 BSD 样式套接字。有人可以为此提供示例代码或链接到一些外部资源以了解如何实现吗?

【问题讨论】:

  • 谁告诉你可以让 Postgresql 通知客户端“数据更改”? Postgresql 中没有这种东西。 Postgresql 唯一拥有的是协作客户端进程之间的抽象侦听/通知信号设施。
  • 我的意思是可以与触发器一起使用的通知功能。 Here 是文档。客户端应用程序可以打开到数据库的套接字并监听给定通道上的通知。

标签: c++ postgresql boost-asio libpqxx


【解决方案1】:

您需要一个派生自pqxx::notification_receiver 的类,请参阅http://pqxx.org/devprojects/libpqxx/doc/4.0/html/Reference/a00208.html“通知和接收器”和 http://pqxx.org/devprojects/libpqxx/doc/4.0/html/Reference/a00062.htmlnotification_receiver 的 API 参考。

【讨论】:

  • 是否可以将接收通知与 boost::asio 事件循环集成?
  • 如果避免轮询真的那么重要,我会使用 libpq 而不是 libpqxx。有关避免轮询的建议,请参阅 postgresql.org/docs/9.1/static/libpq-notify.html。不太自信:我认为直接与 asio 集成基本上是不可能的。我会专门运行一个单独的线程来接收带有 libpq 的通知,然后使用 io_service::post 将通知传递给 asio 毛球。
  • 10x 我设法使用 asionull_buffers 功能将 libpqxxboost::asio 集成在一起i>.
  • @bobeff 你有没有机会开源该集成代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 2017-11-29
相关资源
最近更新 更多