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