Инструмент командной строки flyway - какой вариант для повторного выполнения неудачного DDL?

Я успешно выполнил миграцию v1 с помощью DDL для создания таблицы. Я скопировал то же самое в файл v2 и запустил - получил ожидаемое сообщение об ошибке проверки:

Переход на версию 1.0.002 com.googlecode.flyway.core.exception.FlywayException: ошибка при выполнении инструкции в строке 1: создать таблицу people(идентификатор (10) первичный ключ, имя varchar2 (301)) Вызвано java.sql.SQLSyntaxErrorException : ORA-00955: имя уже используется существующим объектом MigrationException: миграция на версию 1.0.002 не удалась! Восстановите резервные копии и откатите базу данных и код.

Я исправил файл v2 и снова запустил миграцию flyway. Возврат сообщения об ошибке

Текущая версия схемы: 1.0.002 MigrationException: миграция на версию 1.0.002 не удалась! Восстановите резервные копии и откатите базу данных и код.

Я не нахожусь на этапе, когда делается резервная копия базы данных - просто пытаюсь выполнить фиксированный DDL. В настоящее время я не вижу решения, кроме очистки пролетного пути. Почему flyway не может повторить попытку запуска НЕУДАЧНЫХ версий (если контрольная сумма изменилась)? Или не должно быть команды отката пролетного пути?

Я знаю, что могу очень хорошо изменить код, чтобы сделать его таким, но была ли какая-то причина, по которой вы выбрали его таким образом?


person dileeph    schedule 18.08.2011    source источник


Ответы (1)


Проблема простого повторного выполнения заключается в том, что некоторые изменения могли быть уже применены, что приведет к сбою миграции.

Для этого есть два решения:

  • Используйте базу данных, поддерживающую транзакции DDL, например PostgreSQL, SQLServer или DB2.
  • Выполните ручную очистку измененных структур и таблицы метаданных перед повторным применением.
person Axel Fontaine    schedule 20.08.2011