Flyway:没有元数据表的非空模式

mar*_*ers 28 flyway

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名为schema的模式中创建一个表spatial_ref_sys.

当我flyway migrate在这个数据库上运行时,我得到了上述错误.运行init似乎创建public.schema_version表并将版本1标记为SUCCEDED而不实际运行迁移文件.我也尝试过initOnMigrate没有成功的组合.Flyway未配置为管理任何架构.

关于如何在这种情况下运行迁移的任何想法?

Axe*_*ine 26

标题有点矛盾,因为数据库确实不是处女,因为您通过PostGIS扩展安装了公共模式中的许多对象.

你也可以

  • 设置flyway.schemas为新架构,比如my_app,然后由Flyway自动创建.您的应用程序应该使用这个而不是公共(推荐)
  • 设置flyway.baselineOnMigratetrue或调用flyway.baseline()公共模式.这将起作用,但public将包含应用程序对象和PostGIS对象的混合


rub*_*bie 5

如果您使用的是 Gradle,则可以运行

./gradlew -Dflyway.schemas=public flywayClean flywayMigrate
Run Code Online (Sandbox Code Playgroud)

其中 public 是包含 schema_versions 表的数据库的名称。这应该删除表和元数据以及运行迁移以使其恢复最新状态。

警告!

这将删除public架构中的所有数据