#node.js #postgresql
#node.js #postgresql
Вопрос:
Postgresql не отправляет уведомление в мое серверное приложение nodejs.
Попробовал решение из следующего руководства здесь
MySQL:
CREATE TABLE PUBLIC.TBLEXAMPLE
(
KEY1 CHARACTER VARYING(10) NOT NULL,
KEY2 CHARACTER VARYING(14) NOT NULL,
VALUE1 CHARACTER VARYING(20),
VALUE2 CHARACTER VARYING(20) NOT NULL,
CONSTRAINT TBLEXAMPLE_PKEY PRIMARY KEY (KEY1, KEY2)
);
CREATE OR REPLACE FUNCTION PUBLIC.NOTIFY() RETURNS trigger AS
$BODY$
BEGIN
PERFORM pg_notify('myEvent', row_to_json(NEW)::text);
RETURN new;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE COST 100;
CREATE TRIGGER TBLEXAMPLE_AFTER
AFTER INSERT
ON PUBLIC.TBLEXAMPLE
FOR EACH ROW
EXECUTE PROCEDURE PUBLIC.NOTIFY();
Проверена строка подключения.
Это код javascript из серверного приложения nodejs.
(async () => {
const client = await db.pool.connect()
console.log('DB client connected')
await client.query('Listen myEvent')
client.on("notification", async msg => {
console.log('--->',msg.channel);
if (msg.payload amp;amp; typeof msg.payload === "string") {
console.log("Payload: ", JSON.parse(msg.payload));
} else {
console.log("Payload: null");
}
});
})().catch(e => console.log(e.stack));
Проверил уведомление из кода javascript.
(async () => {
const client = await db.pool.connect()
try{
await client.query('NOTIFY myEvent');
}finally{
client.release();
}
})();
Ответ №1:
Проблема решена,
db.pool.connect((err, client) => {
if(err) {
console.log(err);
}
pgClient = client;
client.on('notification', function(msg) {
console.log('Hello i am new event ')
});
const query = client.query('LISTEN myEvent');
});