Иногда нужно массово менять данные, временно нарушая
UNIQUE, но итоговое состояние корректно:BEGIN;
Включаем отложенную проверку конкретного ограничения, оно проверится только при
COMMIT:SET CONSTRAINTS users_email_uniq DEFERRED;
Теперь можно выполнять
UPDATE/INSERT, даже если в процессе появляются дубликаты:UPDATE users
SET email = lower(email);
Фиксация происходит один раз, если финальное состояние валидно, транзакция коммитится:
COMMIT;
Если уникальность нарушена в конце будет
ROLLBACK, без частичных изменений.🔥 Отложенные ограничения позволяют безопасно менять данные внутри транзакции, сохраняя целостность и контроль без временного снятия
UNIQUE.➡️ SQL Ready | #совет
