postgresql – 使用node-postgres进行LISTEN查询超时?

postgresql – 使用node-postgres进行LISTEN查询超时?,第1张

概述我在 Postgresql 9.1数据库上有一个“文章”表和一个通知每个插入的通道的触发器. 我想创建一个node.js脚本来捕获这些插入并使用Socket.io将通知推送到连接的客户端.到目前为止,我正在使用node-postgres模块LISTEN到通道,但似乎LISTEN查询在大约10-15秒后超时并停止捕获插入.我可以在超时发生时查询新的监听,但我不确定如何正确实现延续. 这是我的post 我在 Postgresql 9.1数据库上有一个“文章”表和一个通知每个插入的通道的触发器.

我想创建一个node.Js脚本来捕获这些插入并使用Socket.io将通知推送到连接的客户端.到目前为止,我正在使用node-postgres模块ListEN到通道,但似乎ListEN查询在大约10-15秒后超时并停止捕获插入.我可以在超时发生时查询新的监听,但我不确定如何正确实现延续.

这是我的postgresql通知程序:

CREATE FUNCTION article_insert_notify() RETURNS trigger AS $$BEGIN  NOTIFY "article_watcher";  RETURN NulL;END;$$LANGUAGE plpgsql;

触发:

CREATE TRIGGER article_insert_triggerAFTER INSERT ON articleFOR EACH ROW EXECUTE PROCEDURE article_insert_notify();

而node.Js代码:

var pg = require ('pg'),pgConnection = "postgres://user:pass@localhost/db"pg.connect(pgConnection,function(err,clIEnt) {    clIEnt.query('ListEN "article_watcher"');    clIEnt.on('notification',function(data) {        console.log(data.payload);    });});

如何确保全职ListEN或如何捕获这些超时以重新发出侦听查询?或者,node-postgres以外的模块可能提供更合适的工具吗?

我在node-postgres repo上得到了我的问题的答案.引用Brianc:

pg.connect is use to create pooled connections. Using a connection
pool connection for Listen events really isn’t supported or a good
IDea though.
[…]
To ‘Listen’ a connection by deFinition must stay open permanently. For
a connection to stay open permanently it can never be returned to the
connection pool.

在这种情况下,正确的监听方式是使用独立客户端:

var pg = require ('pg'),pgConnectionString = "postgres://user:pass@localhost/db";var clIEnt = new pg.ClIEnt(pgConnectionString);clIEnt.connect();clIEnt.query('ListEN "article_watcher"');clIEnt.on('notification',function(data) {    console.log(data.payload);});
总结

以上是内存溢出为你收集整理的postgresql – 使用node-postgres进行LISTEN查询超时?全部内容,希望文章能够帮你解决postgresql – 使用node-postgres进行LISTEN查询超时?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1170096.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存