首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用node-postgres监听查询超时?

使用node-postgres监听查询超时?
EN

Stack Overflow用户
提问于 2011-11-25 04:53:16
回答 3查看 3.5K关注 0票数 8

我在PostgreSQL9.1数据库上有一个“文章”表和一个在每次插入时通知通道的触发器。

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

下面是我的postgresql通知过程:

代码语言:javascript
复制
CREATE FUNCTION article_insert_notify() RETURNS trigger AS $$
BEGIN
  NOTIFY "article_watcher";
  RETURN NULL;
END;
$$ LANGUAGE plpgsql;

触发器:

代码语言:javascript
复制
CREATE TRIGGER article_insert_trigger
AFTER INSERT ON article
FOR EACH ROW EXECUTE PROCEDURE article_insert_notify();

和node.js代码:

代码语言:javascript
复制
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);
    });
});

如何确保完整的侦听,或者如何捕获这些超时以重新发出侦听查询?或者,node-postgres之外的其他模块提供了更合适的工具来实现这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-27 01:35:40

我得到了我关于node-postgres repo的问题的答案。引用Brianc的话:

pg.connect用于创建池化连接。使用连接池连接侦听事件确实是不受支持的,但这是一个好主意。..。要“监听”,根据定义,连接必须保持永久打开。对于永久保持打开的连接,它永远不能返回到连接池。

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

代码语言:javascript
复制
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);
});
票数 9
EN

Stack Overflow用户

发布于 2011-11-25 04:59:32

LISTEN应该在会话生存期内持续,或者一直持续到您执行UNLISTEN。因此,只要您的代码正在运行,就应该发送通知。请注意,IIRC,postgresql没有承诺为每个NOTIFY提供一个通知--如果您有多个NOTIFY,它可能会选择提供一个单独的insert。由于不确定9.1,他们引入了LISTEN有效负载,因此它可能没有什么意义。

票数 0
EN

Stack Overflow用户

发布于 2021-08-20 21:31:35

pg-promise中的永久连接是

代码语言:javascript
复制
db.connect({direct: true})
  .then(...)
  .catch(...);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8262375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档