Используйте expand–migrate–contract: сначала совместимое расширение схемы, затем перенос данных и переключение кода, в конце удаление старых структур. Старый и новый код должны переживать период совместной работы.
Как организовать миграции базы данных в CI/CD так, чтобы не прерывать работу сервиса?
Используйте expand–migrate–contract: сначала совместимое расширение схемы, затем перенос данных и переключение кода, в конце удаление старых структур. Старый и новый код должны переживать период совместной работы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Используйте expand–migrate–contract: сначала совместимое расширение схемы, затем перенос данных и переключение кода, в конце удаление старых структур. Старый и новый код должны переживать период совместной работы.
Новый nullable-столбец добавляют отдельно от пакетного backfill, который выполняют идемпотентно с ограничением нагрузки. Индексы и ограничения вводят с учётом блокировок конкретной СУБД. В pipeline нужен один исполнитель миграций, lock timeout, наблюдаемость и возможность остановить перенос. Удалять старый столбец одновременно с выкладкой его замены опасно: старые экземпляры ещё работают. Откат кода тоже должен оставаться совместимым; не каждая миграция данных имеет безопасный автоматический rollback.