PostgreSql - ограничение не применяется триггером - PullRequest
0 голосов
/ 06 января 2010

У меня есть таблица, определенная так:

CREATE TABLE A (
   begin date,
   end date,
   CONSTRAINT ordered_dates CHECK ( begin <= end)
)

.. и 2 связанных триггера:

  • триггер1 до обновления
  • trigger2 при ПОСЛЕ обновления

В триггере 1 есть вставка во вторую таблицу B путем вычисления интервала (= end-begin).

Если ограничение order_dates не соблюдается, в таблицу B вставлены неверные значения. Но, похоже, ограничение проверяется ТОЛЬКО во время обновления, а НЕ в триггере ДО.

Нужно ли мне снова проверять order_date ONCE в триггере до и вечно вызывать исключение в триггере до ?? 1018 *

Ответы [ 2 ]

2 голосов
/ 06 января 2010

Ваш триггер срабатывает перед вставкой, поэтому он получает значения до применения ограничений.

Да, вам необходимо проверить значения или применить триггер после вставки.

0 голосов
/ 06 января 2010

Это не проблема, потому что транзакция будет прервана, когда ограничение CHECK сработает и не будет выполнено, и, таким образом, вставка в таблицу B будет (правильно) отменена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...