Postgres:将pg_notify与`node-postgres` Javascript库一起使用时未收到有效载荷

问题描述 投票:0回答:1

我指定了在表中插入一行后执行的功能。此函数使用pg_notify函数用新行的JSON负载通知通道jobqueue

[job_notifier功能:

  CREATE FUNCTION job_notifier() RETURNS TRIGGER AS $$
  BEGIN
    PERFORM pg_notify('jobqueue', row_to_json(NEW)::text);
    RETURN NEW;
  END;
  $$ LANGUAGE plpgsql;

这是触发器:CREATE TRIGGER job_created AFTER INSERT ON jobs EXECUTE FUNCTION job_notifier();

jobs表由几列组成。

我正在使用node-postgres库来访问数据库。使用该库创建的我的JS客户端之一收到了该消息,因此我知道该函数在正确的时间触发。

但是有效负载是空字符串。当我用row_to_json(NEW)::text这样的简单字符串替换'abcd'时,会得到此有效负载,因此由于某种原因,无法转换为JSON对象。

我不确定这是否是我的数据库功能存在的问题,但我怀疑这可能与Javascript库有关。

有人使用node-postgres进行这种设置吗?数据库在docker容器中运行(来自Dockerhub的官方postgres图像),也许我可以启用某种日志记录功能,以查看是否在数据库中生成了有效负载?

javascript postgresql database-trigger node-postgres pg-notify
1个回答
0
投票

触发器的默认值是为每个语句触发一次,对于该语句,将NEW设置为NULL,从而不会产生有效负载。如果希望触发器为每一行触发一次,并填充NEW,则必须指定它。

CREATE TRIGGER job_created AFTER INSERT ON jobs FOR EACH ROW 
    EXECUTE FUNCTION job_notifier();
© www.soinside.com 2019 - 2024. All rights reserved.