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