有没有办法在 knex.js PostgreSQL 上使用 "Listen"?
Is there a way to use "Listen" on knex.js PostgreSQL?
我在 PostgreSQL 数据库中有一个名为 "posts".
的 table
所以我想做的是观看帖子 Table 并在插入任何数据时收到通知。
所以我创建了这个 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工具连接到数据库。
所以为了获得通知,我需要使用“LISTEN”,我不知道如何实现,我查看了 knex.js 的官方文档找不到与此主题相关的任何信息。
伙计们,我很难在这里完成这项工作,所以如果有人可以在这里帮助我提供代码或建议,如果我错了,因为我现在非常非常困惑。
提前谢谢你们 <3
这可能对以后的人有帮助:
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);
}
我在 PostgreSQL 数据库中有一个名为 "posts".
的 table
所以我想做的是观看帖子 Table 并在插入任何数据时收到通知。
所以我创建了这个 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工具连接到数据库。
所以为了获得通知,我需要使用“LISTEN”,我不知道如何实现,我查看了 knex.js 的官方文档找不到与此主题相关的任何信息。
伙计们,我很难在这里完成这项工作,所以如果有人可以在这里帮助我提供代码或建议,如果我错了,因为我现在非常非常困惑。
提前谢谢你们 <3
这可能对以后的人有帮助:
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);
}