晕,我是postgresql的新手,现在我有一个将db从mysql迁移到postgresql的项目。 我想在删除父数据时进行触发,子数据也将被删除。 这是结构说明:
table_A(触发)
这是我尝试的代码:
CREATE OR REPLACE FUNCTION delete_relation() RETURNS trigger AS
$$
BEGIN
DELETE FROM table_C
USING table_B
WHERE table_C.id = table_B.id_C;
DELETE FROM table_C
USING table_B
WHERE table_D.id = table_B.id_D;
DELETE FROM table_B WHERE table_B.id_A = OLD.id;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER
delete_table_A
AFTER DELETE ON
table_A
FOR EACH ROW EXECUTE PROCEDURE delete_relation();
然后,当我执行时,它将返回以下内容:
Function executed no return statement: 7
ERROR: control reached end of trigger procedure without RETURN
CONTEXT: PL/pgSQL function delete_relation()
答案 0 :(得分:1)
您无需定义任何触发器,只需在表的结构中启用delete on cascade
,以便从表中删除记录时,其他表中所有具有引用的记录(外键)删除的记录,也会被删除。
看看this
答案 1 :(得分:1)
在不判断完成某项任务的方法的效率的情况下,错误消息非常明显,这意味着您缺少the documentation要求的RETURN
语句:
触发器函数必须返回NULL或具有正确触发触发器的表结构的记录/行值。
对于AFTER
触发器,应为:
...
RETURN NULL;
...