【发布时间】:2012-01-05 22:28:40
【问题描述】:
我在 Postgresql 9.1 数据库上有一个“文章”表和一个在每次插入时通知通道的触发器。
我想创建一个 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: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 以外的模块提供了更合适的工具来做到这一点?
【问题讨论】:
-
使用pg-promise,完整的例子和解释:LISTEN / NOTIFY
标签: postgresql node.js asynchronous