级联删除不触发触发器

use*_*672 5 mysql postgresql

我转向 postgresql 的原因之一是(与 mysql 不同)外键操作(例如级联删除)可以触发触发器。

在我的数据库中,我有表“penalty_kicks”,其中外键引用“player_instance”:

ALTER TABLE penalty_kicks ADD FOREIGN KEY (kicker_id) REFERENCES player_instance (id) ON DELETE CASCADE;
Run Code Online (Sandbox Code Playgroud)

我知道,当我删除一个player_instance时,惩罚_踢的每个关联行都会被删除。

我还有一个触发器函数,如果删除penalty_kicks 行,那么它将更改“scores”行:

CREATE TRIGGER delete_penalty_kicks AFTER DELETE ON penalty_kicks FOR EACH ROW EXECUTE PROCEDURE delete_kicks();

CREATE FUNCTION delete_kicks()
RETURNS trigger AS $temp$
BEGIN

    UPDATE scores s
    SET    points = points -3
    FROM   player_instance pi
    WHERE  pi.id = OLD.kicker_id
    AND    s.match_id = pi.match_id 
    AND    s.team_id  = pi.team_id 
    AND    OLD.success;         
RETURN NULL;         

END;
$temp$
LANGUAGE 'plpgsql';
Run Code Online (Sandbox Code Playgroud)

(非常感谢另一位用户的上述内容)

我知道这是有效的,因为当我删除penalty_kicks 的行时,它将在得分上执行正确的操作。

但是,当我删除player_instance时,它只会删除penalty_kick(通过级联),而不会触发触发器来改变分数。

有任何想法吗?

谢谢