сказать, что констрейнт не сработает?
Ох, предлагаю вам попробовать проделать самому такой эксперимент в двух параллельно работающих сессиях. create table x (value int check (value <= 5)); insert into x values (4); -- session1 begin; update x set value = value + 1; -- session2 begin; update x set value = value + 1; Что произойдёт в сессии2 в этот момент? Она заблокируется и будет ждать результат сессии1. Продолжим выполнение -- session1 commit; Посмотрите, что теперь произошло в сессии2. Она разблоировалась, перепрочитала значение, которое уже стало равно 5, и попыталась выполнить обновление. После обновления она сделала проверку check и откатилась.
CHECK contstraint срабатывают всегда, независимо ни от чего (если Вы не пытаетесь "умничать", обманывая PostgreSQL насчёт volatility используемых в них функций и т.п.)
Обсуждают сегодня