我有一个Postgresql 9.1数据库上的“文章”表和一个通知每个插入通道的触发器。使用node-postgres监听查询超时?
我想创建一个node.js脚本来捕获这些插入,并使用Socket.io将通知推送到连接的客户端。到目前为止,我使用node-postgres模块来侦听频道,但似乎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_trigger
AFTER INSERT ON article
FOR EACH ROW EXECUTE PROCEDURE article_insert_notify();
而且Node.js的代码:
var pg = require ('pg'),
pgConnection = "postgres://user:[email protected]/db"
pg.connect(pgConnection, function(err, client) {
client.query('LISTEN "article_watcher"');
client.on('notification', function(data) {
console.log(data.payload);
});
});
如何确保一个全职LISTEN或如何我能否抓住这些超时时间来重新发出听取查询?或者,也许node-postgres以外的其他模块可以提供更合适的工具来实现这一点?
使用[PG-承诺(https://github.com/vitaly-t/pg-promise) ,完整的例子与解释:[LISTEN/NOTIFY](https://github.com/vitaly-t/pg-promise/wiki/Learn-by-Example#listen--notify) –