我有一個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) –