Postgresql не отправляет уведомление моему серверному приложению nodejs.
Пробное решение из следующего учебника здесь
Мой SQL:
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.info('DB client connected')
await client.query('Listen myEvent')
client.on("notification", async msg => {
console.info('--->',msg.channel);
if (msg.payload && typeof msg.payload === "string") {
console.info("Payload: ", JSON.parse(msg.payload));
} else {
console.info("Payload: null");
}
});
})().catch(e => console.info(e.stack));
Проверено уведомление из кода javascript.
(async () => {
const client = await db.pool.connect()
try{
await client.query('NOTIFY myEvent');
}finally{
client.release();
}
})();
Проблема решена,
db.pool.connect((err, client) => {
if (err) {
console.info(err);
}
pgClient = client;
client.on('notification', function(msg) {
console.info('Hello i am new event ')
});
const query = client.query('LISTEN myEvent');
});