除非 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 - 然后像您一样设置基线。