Есть ли способ использовать «прослушивание» на knex.js PostgreSQL?

#node.js #postgresql #knexjs

#node.js #postgresql #knex.js

Вопрос:

у меня есть таблица в базе данных PostgreSQL под названием «сообщения».

итак, что я хочу сделать, это просмотреть таблицу posts и получить уведомление, если будут вставлены какие-либо данные.

итак, я создал эту функцию notify_changes_of_posts_Table следующим образом:

 CREATE OR REPLACE FUNCTION notify_changes_of_posts_Table()
RETURNS trigger AS $$
BEGIN
  PERFORM pg_notify(
    'posts_changes',
    json_build_object(
      'operation', TG_OP,
      'record', row_to_json(NEW)
    )::text
  );

  RETURN NEW;
END;
$$ LANGUAGE plpgsql;
  

а также я создал триггер события следующим образом:

 CREATE TRIGGER posts_changes
AFTER INSERT 
ON posts
FOR EACH ROW
EXECUTE PROCEDURE notify_changes_of_posts_Table()
  

и мой сервер подключен к базе данных следующим образом:

 const db = knex({
  client: 'pg',
  connection: {
    host : '127.0.0.1',
    user : 'postgres',
    password : 'admin',
    database : 'mydb'
  }
});
  

и обратите внимание, что сервер Nodejs подключается к базе данных с помощью knex.js инструмент.

итак, чтобы получать уведомления, мне нужно использовать «ПРОСЛУШИВАНИЕ«, и я не знаю, как этого добиться, я проверил официальную документацию knex.js не могу найти никакой информации, связанной с этой темой.

итак, ребята, я запутался, чтобы закончить эту работу здесь, поэтому, если кто-нибудь может помочь мне здесь с кодами или предложениями, если я ошибаюсь, потому что я сейчас очень запутанный.
Заранее спасибо, ребята <3

Комментарии:

1. Вы нашли решение?

2. @Jivings вы можете проверить ответ ниже,..

3. Большое спасибо @Salah. Вы также можете пометить этот ответ как правильный 🙂

Ответ №1:

может быть, это поможет кому-то в будущем :

 async function notify(){
const connection = await db.client.acquireConnection();
connection.query('LISTEN addedrecordp');
connection.on('notification', (msg) => {
   console.log("got "   msg.channel   " payload "   msg.payload);
   
   })

});

await db.client.releaseConnection(connection);

}