【发布时间】:2012-05-21 14:51:23
【问题描述】:
我刚刚放弃了 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,则进程表将根本不执行删除,并提供错误消息“此行没有唯一标识符”。
谁能给点建议?
【问题讨论】:
标签: postgresql triggers plpgsql