Ho una tabella "article" su un database Postgresql 9.1 e un trigger che notifica un canale su ogni inserto.LISTEN timeout della query con node-postgres?
Mi piacerebbe creare uno script node.js che catturi quegli inserti e spinga le notifiche ai client connessi usando Socket.io. Finora sto usando il modulo node-postgres su LISTEN per il canale ma sembra che la query LISTEN scade dopo circa 10-15 secondi e smette di catturare gli inserti. Potrei richiedere un nuovo ascolto quando si verifica il timeout, ma non sono sicuro di come implementare correttamente la continuazione.
Ecco la mia procedura di notifica di PostgreSQL:
CREATE FUNCTION article_insert_notify() RETURNS trigger AS $$
BEGIN
NOTIFY "article_watcher";
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
Il trigger:
CREATE TRIGGER article_insert_trigger
AFTER INSERT ON article
FOR EACH ROW EXECUTE PROCEDURE article_insert_notify();
E il codice 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);
});
});
Come posso garantire un tempo pieno o come LISTEN posso prendere quei timeout per riemettere una query di ascolto? O forse un modulo diverso da node-postgres offre strumenti più appropriati per farlo?
Usando [pg-promessa] (https://github.com/vitaly-t/pg-promise) , completi esempi con spiegazioni: [LISTEN/NOTIFY] (https://github.com/vitaly-t/pg-promise/wiki/Learn-by-Example#listen--notify) –