PostgreSQL触发器不工作-删除之前和之后都不工作
为了支持PostgreSQL,我刚刚放弃了MySQL,我对触发器有一个问题。此触发器用于在“流程”表中删除行时更新“工作流”表中的字段PostgreSQL触发器不工作-删除之前和之后都不工作,postgresql,triggers,plpgsql,Postgresql,Triggers,Plpgsql,为了支持PostgreSQL,我刚刚放弃了MySQL,我对触发器有一个问题。此触发器用于在“流程”表中删除行时更新“工作流”表中的字段 CREATE OR REPLACE FUNCTION fn_process_delete() RETURNS TRIGGER AS $$ BEGIN UPDATE workflow SET deleted_process_name = OLD.process_name WHERE process_id = OLD.process_id;
CREATE OR REPLACE FUNCTION fn_process_delete() RETURNS TRIGGER AS $$
BEGIN
UPDATE workflow SET deleted_process_name = OLD.process_name
WHERE process_id = OLD.process_id;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS process_delete ON processes;
CREATE TRIGGER process_delete
AFTER DELETE ON processes
FOR EACH ROW
EXECUTE PROCEDURE fn_process_delete();
我的问题有两个方面:
RETURN NULL;
这样,您将跳过触发事件的执行:
在之前触发的行级触发器可以返回null以通知触发器
经理跳过此行的其余操作(即。,
随后的触发器不会被触发,而插入
/更新
/删除
会被触发
不在此行中出现)
您需要将其替换为:
RETURN OLD;
让系统继续删除该行。原因如下:
如果在删除
上的之前触发,则返回的值没有
直接影响,但它必须非空,以允许触发操作
继续请注意,DELETE
触发器中的NEW
为空,因此返回
这通常是不明智的删除触发器中的惯用用法是
返回旧的
我的
问题1
我看不出您的触发器和触发器函数在删除后不能作为
工作的原因。不用说,表工作流中必须存在一个具有匹配流程id的行
,太好了-谢谢!在MySQL之后,我对触发器返回行为并不十分熟悉。