Спровоцировать и проверить ограничения
Я хочу добавить проверку на уровне полей в таблицу. Существует поле с именем "account_number", и это поле всегда должно проходить проверку" luhn". Я нашел функцию под названием "luhn_verify", которая, кажется, работает правильно (google для нее, если вам интересно). Он возвращает логическое значение. Мой вопрос:
Существуют ли какие-либо основные преимущества производительности в PostgreSQL для использования триггера для этой проверки по сравнению с ограничением проверки.
Дополнительная информация:
- PostgreSQL 9.1
- таблица в настоящее время не имеет триггера вставки, но имеет обновление.
Отказ от ответственности:
Я чувствую, что на этот вопрос, вероятно, уже был дан ответ, но я не могу найти четкого ответа. Если да, пожалуйста, отметьте как дубликат и ссылайтесь на оригинальный вопрос / ответ.
Возможно, это лучшие вопросы для Совета dba.
1 ответ:
Эмпирическое правило состоит в том, чтобы использовать ограничение
CHECK
, прежде чем прибегать к триггерам.Ограничение
CHECK
быстрее, проще, более портативно, требует меньше кода и менее подвержено ошибкам. Триггеры можно легко обойти с помощью других триггеров, например.Триггеры гораздо сложнее . Используйте их, когда вы должны , для более сложных требований.
Если ограничение
CHECK
слишком ограничено для вашего случая или вызывает проблемы с перезагрузкой дампа, вы можете использовать модификаторNOT VALID
в качестве среднего уровня (pg 9.2+). Подробности: