13

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

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

附加信息:

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

免责声明:

我觉得这可能已经被回答了,但我似乎无法找到一个明确的答案。如果是这样,请标记为重复并参考原始问题/答案。

对于dba董事会来说可能是一个更好的问题。

4

1 回答 1

19

经验法则是尽可能使用CHECK约束。

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

ATRIGGER比较复杂。必要时使用它,满足更复杂的要求。

如果CHECK约束对您的情况过于严格或导致重新加载转储时出现问题,您可以使用NOT VALID修饰符作为中间立场(Postgres 9.2+)。并且,可选地,VALIDATE稍后。看:

于 2013-08-23T21:09:29.217 回答