Postgres LISTEN/NOTIFY与pg-promise
问题描述:
我想在PostgreSQL中设置一个简单的LISTEN/NOTIFY
功能并使用pg-promise库通知node.js代码。Postgres LISTEN/NOTIFY与pg-promise
我已经脚手架的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-promise的Learn By Example文档here的。我没有回顾关于此主题的其他帖子,但没有找到基于pg-promise的解决方案。
答
它不是
sco.client.on('assets', function (data) {
它是
sco.client.on('notification', function (data) {
即你正在订阅通用notification
消息,而不是信道名称。这就是你所引用的the very example。
我做了这个改变,仍然没有收到通知。还有什么我应该找的? –
@PiyushMehta看起来你正在通过'watchers'频道进行募捐,而在频道'assets'上发布'LISTEN'来代替。 –
谢谢,这是做到了。 –