我刚刚离开 MySQL 支持 PostgreSQL,我有一个关于触发器的问题。如果删除了“流程”表中的行,则此触发器旨在更新“工作流”表中的字段。
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();
我的问题有两个:
如果我如上所述使用 AFTER DELETE,该行将被删除,但更新语句不会更新“工作流”表中的字段。
如果我使用 BEFORE DELETE,则进程表将根本不执行删除,并提供一条错误消息“该行没有唯一标识符”。
任何人都可以建议吗?