Postgres级联删除非唯一列

问题描述 投票:1回答:1

我有这样一张桌子:

id | group_id | parent_group
---+----------+-------------
1  | 1        | null
2  | 1        | null
3  | 2        | 1
4  | 2        | 1

是否可以添加约束,以便在没有group_id等于行的parent_group的行时自动删除行?例如,如果我删除第1行和第2行,我希望自动删除第3行和第4行,因为没有更多行使用group_id 1。

postgresql cascade
1个回答
0
投票

克莱门斯发布的答案让我得到了以下解决方案。我对触发器不太熟悉;可能有任何问题,有没有更好的方法呢?

CREATE OR REPLACE FUNCTION on_group_deleted() RETURNS TRIGGER AS $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM my_table WHERE group_id = OLD.group_id) THEN
        DELETE FROM my_table WHERE parent_group = OLD.group_id;
    END IF;
    RETURN OLD;
END;
$$ LANGUAGE PLPGSQL;

CREATE TRIGGER my_table_delete_trigger AFTER DELETE ON my_table
FOR EACH ROW
EXECUTE PROCEDURE on_group_deleted();
© www.soinside.com 2019 - 2024. All rights reserved.