Postgres:将 pg_notify 与 `node-postgres` Javascript 库一起使用时未收到有效负载
Postgres: No payload received when using pg_notify with `node-postgres` Javascript library
我指定了一个函数,该函数在向 table 中插入一行后执行。此函数使用 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
table由几列组成。
我正在使用 node-postgres 库来访问数据库。我用这个库创建的一个 JS 客户端收到消息,所以我知道该函数在正确的时刻被触发。
但是负载是空字符串。当我用像 'abcd'
这样的简单字符串替换 row_to_json(NEW)::text
时,我得到了这个有效负载,因此由于某种原因,转换为 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();
我指定了一个函数,该函数在向 table 中插入一行后执行。此函数使用 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
table由几列组成。
我正在使用 node-postgres 库来访问数据库。我用这个库创建的一个 JS 客户端收到消息,所以我知道该函数在正确的时刻被触发。
但是负载是空字符串。当我用像 'abcd'
这样的简单字符串替换 row_to_json(NEW)::text
时,我得到了这个有效负载,因此由于某种原因,转换为 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();