【发布时间】:2021-12-18 21:29:02
【问题描述】:
在 PostgreSQL 中,我有一个定义了触发器的表,它调用定义的 PostgreSQL 函数。触发器是BEFORE UPDATE。定义触发器后,我无法对相关表进行更新。如果我将触发器重新定义为 AFTER UPDATE 一切正常。关于为什么的任何想法?
该表类似于以下内容:
create table user (
id bigserial constraint pk_userprimary key,
username varchar,
hasreadinstructions smallint,
hasstarted smallint,
hasendeddataentry smallint,
hasviewedresults smallint,
email varchar,
firstname varchar,
lastname varchar,
registrationdate timestamp);
而功能是:
create function perform_notify() returns trigger
language plpgsql
as
$$
BEGIN
PERFORM pg_notify('has_read_instructions', 'foo');
RETURN NULL;
END;
$$;
触发器是:
CREATE TRIGGER has_read_instructions BEFORE UPDATE
ON user FOR EACH ROW EXECUTE PROCEDURE
perform_notify();
如果我用 BEFORE UPDATE 定义触发器,如图所示,对表的更新不起作用,例如:
update user set hasreadinstructions = 1 where id = 1;
结果是UPDATE 0,值不变。
如果我将触发器更改为 AFTER UPDATE,一切似乎都很好,并且我对表的更新工作正常,结果是 UPDATE 1,值被更改。
在这种情况下,我并不特别关心我是使用BEFORE 还是AFTER,但我不知道为什么;因此,对于理解这一点的任何帮助将不胜感激。
【问题讨论】:
标签: postgresql triggers notify pg-notify