除非 schema_version table 在数据库中,否则 Flyway 基线不起作用
Flyway baseline doesn't work unless schema_version table is in the database
在我的 Java 应用程序中,我设置了:
flyway.setBaselineVersionAsString("7")
然而,在还没有 schema_version
table 的全新数据库上,Flyway 不考虑基线设置并运行所有迁移。
有没有办法在迁移开始之前强制创建 schema_version
table,因为我尝试手动创建 table 并且代码运行良好。或者对于这个问题还有其他解决方案吗?
你是哪个命令 运行ning, baseline
or migrate
?
如果您 运行ning baseline
那么您需要发布更多配置以确定问题所在 - 就像创建一个带有 basline 的 schema_version
table版本正是它的作用。
如果您 运行宁 migrate
观察到的行为是正确的 - 也就是说,在非 Flyway 管理的数据库上将创建 schema_version
table 并且所有迁移 运行。一个例外是,如果您设置了 baselineOnMigrate
,这将在 migrate
开始之前有效地 运行 隐式 baseline
。
自己创建 schema_version
当然是你不应该 不 做的事情,你将完全损害 Flyways 智能。
这种情况我遇到过太多次了。我的做法是检测 flyway.info() 的结果。如果它为 null,则表示模式有对象但没有“schema_version”table - 然后像您一样设置基线。
在我的 Java 应用程序中,我设置了:
flyway.setBaselineVersionAsString("7")
然而,在还没有 schema_version
table 的全新数据库上,Flyway 不考虑基线设置并运行所有迁移。
有没有办法在迁移开始之前强制创建 schema_version
table,因为我尝试手动创建 table 并且代码运行良好。或者对于这个问题还有其他解决方案吗?
你是哪个命令 运行ning, baseline
or migrate
?
如果您 运行ning baseline
那么您需要发布更多配置以确定问题所在 - 就像创建一个带有 basline 的 schema_version
table版本正是它的作用。
如果您 运行宁 migrate
观察到的行为是正确的 - 也就是说,在非 Flyway 管理的数据库上将创建 schema_version
table 并且所有迁移 运行。一个例外是,如果您设置了 baselineOnMigrate
,这将在 migrate
开始之前有效地 运行 隐式 baseline
。
自己创建 schema_version
当然是你不应该 不 做的事情,你将完全损害 Flyways 智能。
这种情况我遇到过太多次了。我的做法是检测 flyway.info() 的结果。如果它为 null,则表示模式有对象但没有“schema_version”table - 然后像您一样设置基线。