Пролет: непустая схема без таблицы метаданных
Found non-empty schema "public" without metadata table! Use init() or set initOnMigrate to true to initialize the metadata table.
- Я использую Postgres 9.2 с Postgis 2.0. Это означает, что по умолчанию при создании новой базы данных будет создана таблица, созданная в
public
схеме spatial_ref_sys
.
Когда я запускаю flyway migrate
в этой базе данных, я получаю вышеуказанную ошибку. Выполнение init
похоже, создает таблицу public.schema_version
и маркирует версию 1 как SUCCEDED без фактического запуска файла миграции. Я также пробовал комбинации initOnMigrate
без успеха. Flyway не настроен для управления любыми схемами.
Любые идеи о том, как я могу выполнить миграцию в этом сценарии?
Ответы
Ответ 1
Название несколько противоречиво, поскольку база данных действительно не девственна, поскольку вы устанавливали через расширение PostGIS несколько объектов в общедоступной схеме.
Вы можете либо
- установите
flyway.schemas
в новую схему, скажем my_app, которая затем будет автоматически создана Flyway. Затем ваше приложение должно использовать это вместо публичного (рекомендуется).
- установите
flyway.baselineOnMigrate
в true
или вызовите flyway.baseline()
против общедоступной схемы. Это будет работать, но публикация будет содержать сочетание как ваших объектов приложения, так и объектов PostGIS.
Ответ 2
Если вы используете Gradle, вы можете запустить
./gradlew -Dflyway.schemas=public flywayClean flywayMigrate
Где public - это имя базы данных, содержащей таблицу schema_versions. Это должно удалить таблицу и метаданные, а также запустить миграцию, чтобы вернуть ее в актуальное состояние.
Внимание!
Это удалит все данные в public
схеме
Ответ 3
Я думаю, что эта ошибка возникает только в последней версии Flyway, т.е. выше 4.03. Я не получил в более раннем проекте, но получил его, когда я использую версию 5.07 Flyway в моем последнем проекте. Положите код здесь, чтобы решить мои проблемы
public class FlywayConfig {
@Autowired
DataSource dataSource;
@Autowired
Config config;
@Bean
public Flyway flyway(){
Flyway flyway = new Flyway();
flyway.setDataSource(dataSource);
flyway.setSqlMigrationPrefix("V");
flyway.setLocations(new String[] { config.getSqlLocation() });
flyway.setBaselineOnMigrate(true);
// *******************flyway.clean(); ********************// this will wipe out the DB, be careful
flyway.migrate();
return flyway;
}
}
Ответ 4
эта работа для меня, я был фигни с той же проблемой много времени
мой проект строился на Maven
Flyway flyway = new Flyway();
flyway.setDataSource(dataSource);
flyway.setLocations("db/your_db");
flyway.setTable("name_of_schema");
затем добавил эту строку
flyway.setBaselineOnMigrate(true);
flyway.clean();
следующие строки
MigrationInfo migrationInfo = flyway.info().current();
flyway.migrate();
и я предоставлю вам URL моих ссылок с flyway.org
Flyway.org/documentation/commandline/baseline
Ответ 5
В pom.xml добавьте эту строку внутри своих плагинов build- > правда