2010-01-05 85 views
0

未應用我有一個表定義如下:相關的PostgreSQL - 約束由觸發器

CREATE TABLE A (
    begin date, 
    end date, 
    CONSTRAINT ordered_dates CHECK (begin <= end) 
) 

..和2觸發器:在BEFORE

  • TRIGGER1後更新來更新
  • 觸發2

在trigger1中,通過計算間隔(= end-begin),在第二個表B中插入一個插入。

如果約束ordered_dates的不尊重,我必須插入表B. 壞值,但約束似乎只有在更新過程中不要在BEFORE觸發器檢查。

我是不是要在TRIGGER1再次測試ORDERED_DATE之前&之前evetually提高在觸發一個例外?我知道如何做到這一點,但我有一些代碼重複。

+0

歡迎來到SO - 您可能想了解有關未來問題的支持降價:http://stackoverflow.com/editing-help – 2010-01-05 23:24:47

回答

2

您的觸發器在插入之前觸發,因此在應用約束之前獲取值。

是的,您需要檢查值或插入後應用觸發器。

0

這不是問題,因爲事務將在CHECK約束觸發並失敗時中止,因此插入到表B中將(正確)回滾。