Обнаруженная разрешенная миграция не применяется к базе данных на пролетной линии

Мы используем flyway для управления версией схемы базы данных, и перед нами стоит проблема. Поскольку мы работаем как команда и используем git как наше управление исходным кодом, будут случаи, когда разные люди обновляют схему базы данных на своем собственном локальном репо. Если это произойдет, мы получим

Обнаруженная разрешенная миграция не применяется к базе данных: 2016.03.17.16.46 "

Время "2016.03.17.16.46" было добавлено другим человеком, и я уже применил некоторую временную метку позже этого времени. Если это произойдет, мы должны очистить все таблицы базы данных и создать их снова. Мы попытались установить false на validateOnMigrate и сделали flywayClean, но ничего не помогли. Есть ли другой способ изменить это?

Ответ 1

outOfOrder - ваш друг здесь. Установите значение true, чтобы разрешить вставлять эти миграции после факта.

Ответ 2

Я столкнулся с подобной проблемой при переключении с одной ветки git на другую и попытался запустить flyway:migrate. Например, когда я был в ветке 'release_4.6.0', у меня не было миграций на моей локальной машине из ветки 'release_4.7.0', поэтому Я получил следующую ошибку FlywayException: Validate failed: Detected applied migration not resolved locally. Решение, которое сработало для меня, - установить для параметра ignoreMissingMigrations значение true. В Maven это выглядит как

flyway:migrate -Dflyway.ignoreMissingMigrations=true

Возможно, это не ответ на этот вопрос, но он может быть полезен для тех, кто столкнулся с той же проблемой, что и я.

Здесь вы можете найти более подробную информацию:https://flywaydb.org/documentation/commandline/migrate#ignoreMissingMigrations

Ответ 3

может быть из-за заказа

добавить на application.properties

flyway.out-of-order = true

или application.yml по весне

flyway:
  out-of-order: true

Ответ 4

..Or вы просто очистить flyway_schema_history стол и bootrun снова.

Убедитесь, что ваши последовательности SQL все идемпотентны.

Затем при следующем запуске вы увидите строки журналов, например:

o.f.c.i.s.DefaultSqlScriptExecutor       : DB: relation "transaction_attempt" already exists, skipping (SQL State: 42P07 - Error Code: 0)
o.f.c.i.s.DefaultSqlScriptExecutor       : DB: relation "provider" already exists, skipping (SQL State: 42P07 - Error Code: 0)

Не забудьте сбросить данные в производственной среде.