在我的Postgres9.6 RDS实例中,我有一个触发器,通常用于记录进来的可疑数据:
create or replace function check_stuff()
returns trigger as
$$
declare passed boolean;
begin
raise warning 'something weird happened';
return new;
end;
$$
language plpgsql
CREATE TRIGGER check_stuff_trigger
BEFORE UPDATE ON important_table
FOR EACH ROW
EXECUTE PROCEDURE check_stuff();
如何配置Sequelize,以便我可以接收和记录这些消息?
答案 0 :(得分:1)
我不认为sequelize.js
具有读取数据库消息(例如您提出的警告消息)的任何功能。
但是,我对node-postgres
(sequelize
用作PostgreSQL的后端)进行了一些了解,在{上确实有一个.on('notice',...)
事件{1}}对象(Sequelize用于Postgres连接)。我想象在连接上执行Client
时将触发此事件。
在RAISE WARNING
的Sequelize挂钩中添加.on('notice', ...)
处理程序将实现您能够记录afterConnect
消息的目的;我已经对以下代码段进行了测试,并且可以正常工作:
RAISE WARNING
在PostgreSQL方言的情况下,sequelize.addHook('afterConnect', (client) => {
// "client" is a node-postgres Client instance when using the postgres dialect
client.on('notice', (notice) => {
// Filter to (for example) only log "RAISE WARNING" level messages
if (notice.severity === 'WARNING') {
console.log(`Received notice with severity ${notice.severity}: ${notice.message}`);
}
});
});
的{{1}}自变量是client
afterConnect
实例;有关文档,请参见https://node-postgres.com/api/client#client-on-39-notice-39-notice-string-gt-void-gt-void。但是,由于我的测试表明node-postgres
,Client
是作为对象传递的,因此doco似乎是错误的,在文档中建议这应该是.on('notice', (arg) => {...})
。