gpt4 book ai didi

sql - 有什么方法可以使用 LISTEN 和 NOTIFY(或 NodeJS)实时监控 Postgresql 查询更改?

转载 作者:搜寻专家 更新时间:2023-11-01 00:37:20 26 4
gpt4 key购买 nike

所以我有一个自定义的 Postgresql 查询,它检索指定经度纬度半径内的所有行,如下所示:

SELECT *, 
earth_distance(ll_to_earth($1,$2), ll_to_earth(lat, lng)) as distance_metres
FROM RoomsWithUsers
WHERE earth_box(ll_to_earth($1,$2), $3) @> ll_to_earth(lat, lng)
ORDER by distance_metres;

在我的 Node 服务器中,我希望每次查询中的行数发生变化时都能收到通知。我研究过使用 Node 库,例如 pg-live-query但我更愿意 pg-pubsub 与现有的 Postgres LISTEN/NOTIFY 一起工作,以避免不必要的开销。但是,据我所知,PostgreSQL TRIGGERs 仅适用于 UPDATE/INSERT/DELETE 操作,不适用于任何特定查询本身。有什么方法可以完成我正在做的事情吗?

最佳答案

您需要设置正确的触发器,为在同一 channel 上使用 LISTEN 的所有客户端调用 NOTIFY

很难建议您如何准确地在触发器中实现您的 NOTIFY 逻辑,因为它取决于以下内容:

  • 该消息面向多少客户?
  • 正在评估的查询有多大?
  • 触发器能否知道查询的逻辑以对其进行评估?

根据答案,您可能会考虑不同的方法,包括但不限于以下选项及其组合:

  • 无法评估结果时执行查询/ View ,并缓存结果
  • 如果可以评估查询结果,则提供智能通知
  • 使用payload将更新细节传递给监听器
  • 安排查询/ View 重新运行以延迟执行,如果它很重
  • 将整个通知作为一项单独的工作进行

某些场景可能会变得非常复杂。例如,您可能有一个可以进行更改的主客户端,以及需要通知的多个从属客户端。在这种情况下,master 执行查询,检查结果是否已更改,然后调用 PostgreSQL 服务器中的函数来触发所有 slave 的通知。

因此,根据手头任务的具体要求,可以有很多变化。在您的情况下,您没有提供足够的详细信息来提供任何特定路径,但上述一般准则应该对您有所帮助。

关于sql - 有什么方法可以使用 LISTEN 和 NOTIFY(或 NodeJS)实时监控 Postgresql 查询更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46898870/

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