Trigger vs. check constraint

☆樱花仙子☆ 提交于 2019-12-28 18:14:25

问题


I want to add a field-level validation on a table. There is a field named "account_number" and this field should always pass a "luhn" check. I've found a function called "luhn_verify" that seems to work properly (google for it if you are interested). It returns a boolean. My question is:

Are there any major performance advantages in PostgreSQL for using a trigger for this validation vs. a check constraint.

Additional information:

  • PostgreSQL 9.1
  • Table does not currently have an insert trigger, but does have an update.

Disclaimers:

I feel like this has probably already been answered, but I can't seem to find a distinct answer. If so, please mark as duplicate and reference original question/answer.

Might be a better questions for the dba board.


回答1:


The rule of thumb is to use CHECK constraint before you resort to triggers.

A CHECK constraint is faster, simpler, more portable, needs less code and is less error prone. Triggers can easily be circumvented by other triggers, for instance.

Triggers are much more complicated. Use them when you have to, for more complex requirements.

If a CHECK constraint is too restrictive for your case or causes trouble reloading a dump, you could use the NOT VALID modifier as middle ground (pg 9.2+). Details:

  • Disable all constraints and table checks while restoring a dump


来源:https://stackoverflow.com/questions/18409952/trigger-vs-check-constraint

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!