PostgreSql - 触发器不应用约束

时间:2010-01-05 23:15:23

标签: sql postgresql triggers constraints

我有一个像这样定义的表:

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

..和2个相关的触发器:

  • 触发器1在BEFORE更新
  • 触发器2在AFTER更新

在trigger1中,通过计算间隔(= end-begin)在第二个表B中插入。

如果不遵守约定ordered_dates,我在表B中插入了错误的值。 但是,约束似乎仅在更新期间检查,而不是在BEFORE触发器中。

我必须在之前和之前的trigger1中再次测试ordered_date ONCE吗?在触发器之前直接引发异常?我知道怎么做但我在某种程度上有代码重复。

2 个答案:

答案 0 :(得分:2)

您的触发器在插入之前触发,因此它在应用约束之前获取值。

是的,您需要检查值或插入后应用触发器。

答案 1 :(得分:0)

这不是问题,因为当CHECK约束触发并失败时,事务将被中止,因此将(正确地)回滚到表B中的插入。