小编kin*_*nic的帖子

PostgreSQL触发器无法正常工作 - 既不是BEFORE也不是AFTER DELETE

我刚刚离开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();
Run Code Online (Sandbox Code Playgroud)

我的问题是双重的:

  1. 如果我如上所述使用AFTER DELETE,则该行将被删除,但update语句不会更新"workflow"表中的字段.

  2. 如果我使用BEFORE DELETE,则进程表将根本不执行删除并发出错误消息"此行没有唯一标识符".

任何人都可以建议吗?

postgresql triggers plpgsql

7
推荐指数
1
解决办法
9273
查看次数

标签 统计

plpgsql ×1

postgresql ×1

triggers ×1