触发与检查约束

时间:2013-08-23 18:56:12

标签: postgresql database-design triggers postgresql-9.1 check-constraints

我想在表上添加字段级验证。有一个名为“account_number”的字段,该字段应始终通过“luhn”检查。我发现了一个名为“luhn_verify”的功能似乎正常工作(谷歌如果你感兴趣的话)。它返回一个布尔值。我的问题是:

PostgreSQL在使用此验证的触发器与检查约束时是否有任何主要的性能优势。

其他信息:

  • PostgreSQL 9.1
  • 表目前没有插入触发器,但确实有更新。

免责声明:

我觉得这可能已经得到了解答,但我似乎找不到明确的答案。如果是,请标记为重复并引用原始问题/答案。

可能是dba板的更好问题。

1 个答案:

答案 0 :(得分:11)

经验法则是在使用触发器之前使用CHECK约束。

A CHECK constraint更快,更简单,更便携,需要的代码更少,更不容易出错。例如,触发器可以很容易地被其他触发器规避。

Triggers are much more complicated必须时使用它们,以满足更复杂的要求。

如果CHECK约束对您的情况限制太多或导致重新加载转储时出现问题,则可以使用NOT VALID修饰符作为中间地点(第9.2+页)。详细说明: