【发布时间】:2019-04-23 17:49:35
【问题描述】:
晕,我是 postgresql 的新手,现在我有一个项目可以将 db 从 mysql 迁移到 postgresql。 我想在删除父数据时触发,子数据也会被删除。 这是结构描述:
-
table_A(触发器)
- table_B
- table_C
- table_D
- table_B
这是我尝试过的代码:
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()
【问题讨论】:
-
你为什么不直接使用
delete on cascade? -
@rad stackoverflow.com/questions/1457013/… 因此我不能使用级联
标签: mysql sql database postgresql