gpt4 book ai didi

mysql - 删除相关数据表的Postgres程序

转载 作者:行者123 更新时间:2023-11-29 14:27:53 25 4
gpt4 key购买 nike

Halo,我是 postgresql 的新手,现在我有一个将数据库从 mysql 迁移到 postgresql 的项目。我想在删除父数据时触发,子数据也将被删除。这是结构描述:

  • table_A(触发器)

    • 表_B
      • 表_C
      • 表_D

这是我试过的代码:

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()

最佳答案

如果不判断您完成特定任务的方法的效率,错误消息非常明显,意味着您缺少 the documentation 要求的 RETURN 语句。 :

A trigger function must return either NULL or a record/row value having exactly the structure of the table the trigger was fired for.

对于 AFTER 触发器,这应该是:

...

RETURN NULL;
...

关于mysql - 删除相关数据表的Postgres程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55816810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com