2014-06-19 236 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'觸發器就更安全了,除非你有充分的理由不這樣做。 –