2014-06-19 237 views
1

我在PostgreSQL的8.4工作,并写了一个触发功能,像这样:行不被删除后删除触发器运行

CREATE OR REPLACE FUNCTION otherschema.order_delete_log_procedure() RETURNS TRIGGER AS 
$$ 
BEGIN 
    DELETE FROM otherschema.order_log AS thelog WHERE thelog.log_order_id=OLD.order_id; 
    RETURN NULL; 
END; 
$$ LANGUAGE plpgsql; 

CREATE TRIGGER order_deletion_log_trigger BEFORE DELETE ON public.order FOR EACH ROW EXECUTE PROCEDURE 
otherschema.order_delete_log_procedure(); 

我的问题是,触发器触发完美(触发器被删除日志行),但是应该从触发触发器的表中删除的行不会被删除(订单未被删除)。

如果我尝试手动删除订单行,它只是说没有行受到影响,并且没有错误。有什么想法吗?

谢谢!

回答

2

BEFORE DELETE返回NULL触发器将中止删除操作。您应该返回old,或将其设为AFTER DELETE触发器。

+0

我应该进一步调查。我现在觉得很愚蠢。谢谢 – user2525680

+0

不要。我自己绊倒了它,而且我看到许多其他人也这样做。由于'NULL'对于DELETE来说似乎是一个合理的返回值(即新值是一个空行),情况变得更糟。只要坚持使用'AFTER'触发器就更安全了,除非你有充分的理由不这样做。 –