Кейс: деплой упал на validate, потому что миграцию поправили руками

Миграция V15 давно применена в проде. Кто-то заметил в ней опечатку, открыл файл и поправил прямо в репозитории — без новой версии миграции, просто «маленький фикс». На следующем деплое Flyway остановился на этапе validate с FlywayException: checksum mismatch.

Flyway хранит в таблице flyway_schema_history checksum каждой применённой миграции и при каждом запуске сверяет его с текущим содержимым файла. Как только применённая миграция считается фактом истории — редактировать её файл нельзя, даже если исправление тривиальное.

Правильный путь — новая миграция с фиксом, а не правка старой. flyway repair пересчитывает checksum и снимает блокировку, но делает это, скрывая реальное изменение истории — в проде это риск, а не решение.

SELECT version, checksum FROM flyway_schema_history ORDER BY installed_rank DESC LIMIT 5;

Что спросят следом: что будет, если два инстанса сервиса запустятся одновременно и оба попытаются применить миграции. Flyway берёт advisory lock прямо в БД на время выполнения миграций — второй инстанс просто ждёт, пока первый закончит.

Применённая миграция — это факт истории, а не черновик, который можно поправить.

Тренажёр: 600 вопросов, мок с таймером, план повторов

senior·base — что спрашивают на самом деле


В этом посте были ссылки, но мы их удалили по правилам Сетки