Есть ли какой-либо способ проверить, почему уведомление postgresql pg_notify () не поступает в мое серверное приложение nodejs?

#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');
});