我指定了在表中插入一行后执行的功能。此函数使用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
图像),也许我可以启用某种日志记录功能,以查看是否在数据库中生成了有效负载?
触发器的默认值是为每个语句触发一次,对于该语句,将NEW设置为NULL,从而不会产生有效负载。如果希望触发器为每一行触发一次,并填充NEW,则必须指定它。
CREATE TRIGGER job_created AFTER INSERT ON jobs FOR EACH ROW
EXECUTE FUNCTION job_notifier();