从Sequelize记录postgres输出消息

时间:2018-08-07 23:36:41

标签: postgresql sequelize.js

在我的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,以便我可以接收和记录这些消息?

1 个答案:

答案 0 :(得分:1)

我不认为sequelize.js具有读取数据库消息(例如您提出的警告消息)的任何功能。

但是,我对node-postgressequelize用作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-postgresClient是作为对象传递的,因此doco似乎是错误的,在文档中建议这应该是.on('notice', (arg) => {...})