我有这样一张桌子:
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。
克莱门斯发布的答案让我得到了以下解决方案。我对触发器不太熟悉;可能有任何问题,有没有更好的方法呢?
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();