Postgres LISTEN / NOTIFY with pg-promise

时间:2017-08-01 00:42:56

标签: postgresql notify listen pg-promise

我正在尝试在PostgreSQL中设置一个简单的LISTEN/NOTIFY功能,并使用pg-promise库通知node.js代码。

我脚手架的pg代码是

CREATE OR REPLACE FUNCTION notify_trigger() RETURNS trigger AS $$
DECLARE
BEGIN
  RAISE NOTICE '%', 'HI';
  PERFORM pg_notify('watchers', TG_TABLE_NAME || ', tags:,' || NEW.tags );
  RETURN new;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER watched_table_trigger BEFORE INSERT OR UPDATE ON assets
FOR EACH ROW EXECUTE PROCEDURE notify_trigger();

它会在psql控制台上通知。

但是当我使用pg-promise代码时,它并没有像我希望的那样输出控制台消息。相关的node.js代码:

const pgoptions = require('./pgoptions.config.js');
const connectObject = require('./pgconnect.config.js');
const db = require('pg-promise')(pgoptions)(connectObject);

// added listener code for pg listen / notify
db.connect({direct: true})
    .then(function (sco) {
        sco.client.on('assets', function (data) {
            console.log('Received: ', data);
    });
    return sco.none('LISTEN assets');
})
.catch(function (error) {
    console.error('Error:', error);
});

module.exports = resources;

nodejs代码直接来自pg-promiseLearn By Example文档here。我确实查看了有关此主题的其他帖子,但没有找到基于pg-promise的解决方案。

1 个答案:

答案 0 :(得分:1)

不是

sco.client.on('assets', function (data) {

它是

sco.client.on('notification', function (data) {

即。您正在订阅通用notification消息,而不是订阅频道名称。这就是你引用the very example的方式。