简体   繁体   中英

Postgres cascade delete on non-unique column

I have a table like this:

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

Is it possible to add a constraint such that a row is automatically deleted when there is no row with a group_id equal to the row's parent_group ? For example, if I delete rows 1 and 2, I want rows 3 and 4 to be deleted automatically because there are no more rows with group_id 1.

The answer that clemens posted led me to the following solution. I'm not very familiar with triggers though; could there be any problems with this and is there a better way to do it?

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM