【问题标题】:PostgreSql - Constraint Not Applied by a TriggerPostgreSql - 触发器未应用约束
【发布时间】:2010-01-05 23:15:23
【问题描述】:

我有一个这样定义的表:

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

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

  • 更新前触发 1
  • 更新后触发 2

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

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

我是否必须在之前的 trigger1 中再次测试 ordered_date ONCE 并最终在触发器中引发异常?? 我知道该怎么做,但我在某种程度上有代码重复。

【问题讨论】:

标签: sql postgresql triggers constraints


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      相关资源
      最近更新 更多