Спровоцировать и проверить ограничения


Я хочу добавить проверку на уровне полей в таблицу. Существует поле с именем "account_number", и это поле всегда должно проходить проверку" luhn". Я нашел функцию под названием "luhn_verify", которая, кажется, работает правильно (google для нее, если вам интересно). Он возвращает логическое значение. Мой вопрос:

Существуют ли какие-либо основные преимущества производительности в PostgreSQL для использования триггера для этой проверки по сравнению с ограничением проверки.

Дополнительная информация:

  • PostgreSQL 9.1
  • таблица в настоящее время не имеет триггера вставки, но имеет обновление.

Отказ от ответственности:

Я чувствую, что на этот вопрос, вероятно, уже был дан ответ, но я не могу найти четкого ответа. Если да, пожалуйста, отметьте как дубликат и ссылайтесь на оригинальный вопрос / ответ.

Возможно, это лучшие вопросы для Совета dba.

1 6

1 ответ:

Эмпирическое правило состоит в том, чтобы использовать ограничение CHECK, прежде чем прибегать к триггерам.

Ограничение CHECK быстрее, проще, более портативно, требует меньше кода и менее подвержено ошибкам. Триггеры можно легко обойти с помощью других триггеров, например.

Триггеры гораздо сложнее . Используйте их, когда вы должны , для более сложных требований.

Если ограничение CHECK слишком ограничено для вашего случая или вызывает проблемы с перезагрузкой дампа, вы можете использовать модификатор NOT VALID в качестве среднего уровня (pg 9.2+). Подробности: