I have an \"article\" table on a Postgresql 9.1 database and a trigger that notifies a channel on each insert.
I\'d like to create a node.js script that catches those in
LISTEN
is supposed to last for the session lifetime or until you do UNLISTEN
. So, as long as your code is running, notifications should be delivered. Note, that IIRC, postgresql gives no promises to deliver one notification per NOTIFY
— if you have many inserts it may choose to deliver a single NOTIFY
. Not sure about 9.1, they introduced LISTEN
payload, so it may make a bit less sense.
I got answer to my issue on the node-postgres repo. To quote 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.
The correct way to listen in this case is to use a standalone client:
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);
});