postgresql - 带有 pg-promise 的 Postgres LISTEN/NOTIFY

标签 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;

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

最佳答案

不是

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

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

即您订阅的是通用 notification 消息,而不是 channel 名称。就是这样显示的the very example你引用了。

关于postgresql - 带有 pg-promise 的 Postgres LISTEN/NOTIFY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45427280/

相关文章:

sql - 将列名传递给函数

postgresql - 检索两列中同一列的数据

java - 从java中的对象释放锁

c++ - 如何创建与系统函数同名的方法?

postgresql - postgreSQL 中的 DO 函数

postgresql - 当 postgres 中的文件大于 1GB 时,在哪里调用分割文件?

java - 如何与已调用监听器的父线程通信?

Java - 这个错过的信号解决方案好吗?

postgresql - 表数据更改时如何在前端触发 NOTIFICATION 事件

mongodb - Node.js 监听 MongoDB 变化