2 个表之间的 SQL 触发器出错,其中一个表在另一个表上有外键

Error on an SQL trigger between 2 tables, one of which has a foreign key on the other

您好,我遇到了触发器的 问题,我不明白我的错误。 脚本编译但是当我删除一个元素时我有这个错误



CREATE OR REPLACE FUNCTION delete_foreign_key() RETURNS TRIGGER AS $_$

  BEGIN 
       
          delete from planning.ordrelivraison_history 
          where ordrelivraison_history.ordrelivraisonid = old.planning.ordrelivraison.ordreid;
      RETURN OLD;
   END;


$_$ LANGUAGE plpgsql;


Create trigger delete_foreign_key_in_order_delivery_history
  after delete 
     on planning.ordrelivraison_history 
    for each row
execute procedure delete_foreign_key();

------------------------------------------------------

delete
from planning.ordrelivraison

where ordreid = 1656


说错话

错误:错误:“交货单”上的更新或删除 table 违反了外键约束 “Ordrelivraison_history_ordreid”来自“ordrelivraison_history”table 详细信息:密钥 (orderid) = (1656) 始终从“ordrelivraison_history”table.

中引用

SQL 状态:23503

你的毛病是在错误的时间扣动了扳机。您将其声明为 AFTER delete 但这使它成为 after statement 触发器,不幸的是,触发器函数不会在 after 语句触发器上获取 old/new 行。请参阅 CREATE TRIGGER 文档。将触发器更改为:

Create trigger delete_foreign_key_in_order_delivery_history
   after delete 
      on ordrelivraison_history 
     for each row
 execute procedure delete_foreign_key();