簡體   English   中英

非唯一列上的Postgres級聯刪除

[英]Postgres cascade delete on non-unique column

我有一張這樣的桌子:

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的行。

clemens發布的答案使我想到了以下解決方案。 我對觸發器不是很熟悉。 可能有任何問題嗎,還有更好的方法嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM