Flyway info命令基线迁移输出异常:重复基线条目问题求助
Flyway Info输出重复基线版本条目问题解答
核心结论
这个重复条目现象不正常,是代码库中存在与基线版本同名的迁移脚本导致的冗余显示,功能上不影响,但可以通过简单操作消除。
原因分析
- 你之前执行过
flywayBaseline命令,将6.4.0设为数据库基线版本,这条记录会以BASELINE类型保存在flyway_schema_history表中。 - 同时你的迁移脚本目录(
classpath:db/migration/v*)里,还有一个对应6.4.0的版本化脚本(比如V6_4_0__Version_6.4.0.sql)。Flyway扫描到该脚本后,发现其版本号与基线版本完全一致,因此将其标记为Ignored (Baseline),最终两个条目同时出现在info输出中。
问题拆解解答
是否正常?
功能运行正常是因为Flyway不会执行被标记为Ignored (Baseline)的脚本,但视觉上的重复属于冗余输出,不符合预期,不算正常现象。如何解决?
- 最优方案:删除代码库中那个6.4.0的版本化迁移脚本。基线已经代表了6.4.0的数据库初始状态,保留该脚本没有实际意义,删除后再次执行
flywayInfo就不会出现重复条目。 - 备选方案(不推荐):如果必须保留脚本,可以在Flyway配置中添加
ignoreMigrationPatterns = arrayOf("V6_4_0__*"),让Flyway忽略该脚本,但会增加配置复杂度,不如直接删除脚本简洁。
- 最优方案:删除代码库中那个6.4.0的版本化迁移脚本。基线已经代表了6.4.0的数据库初始状态,保留该脚本没有实际意义,删除后再次执行
能否手动编辑
flyway_schema_history表?
绝对不建议!Flyway完全依赖这个表的记录来追踪数据库迁移状态,手动修改可能破坏版本链的完整性,导致后续迁移出现执行混乱、版本校验失败等不可预测的问题。
你提供的info输出:
Schema version: 6.8.0 +-----------+---------+-----------------------+----------+---------------------+--------------------+----------+ | Category | Version | Description | Type | Installed On | State | Undoable | +-----------+---------+-----------------------+----------+---------------------+--------------------+----------+ | Versioned | 6.0.0 | Version 6.0.0 | SQL | | Below Baseline | No | | Versioned | 6.0.1 | Version 6.0.1 | SQL | | Below Baseline | No | | Versioned | 6.1.0 | Version 6.1.0 | SQL | | Below Baseline | No | | Versioned | 6.1.1 | Version 6.1.1 | SQL | | Below Baseline | No | | Versioned | 6.2.0 | Version 6.2.0 | SQL | | Below Baseline | No | | Versioned | 6.2.1 | Version 6.2.1 | SQL | | Below Baseline | No | | Versioned | 6.3.0 | Version 6.3.0 | SQL | | Below Baseline | No | | | 6.4.0 | << Flyway Baseline >> | BASELINE | 2023-01-23 15:39:49 | Baseline | No | | Versioned | 6.4.1 | Version 6.4.1 | SQL | 2023-01-23 15:40:15 | Success | No | | Versioned | 6.4.2 | Version 6.4.2 | SQL | 2023-01-23 15:40:17 | Success | No | | Versioned | 6.5.0 | Version 6.5.0 | SQL | 2023-01-23 15:40:18 | Success | No | | Versioned | 6.6.0 | Version 6.6.0 | SQL | 2023-01-23 15:40:19 | Success | No | | Versioned | 6.6.1 | Version 6.6.1 | SQL | 2023-01-23 15:40:22 | Success | No | | Versioned | 6.6.2 | Version 6.6.2 | SQL | 2023-01-23 15:40:26 | Success | No | | Versioned | 6.6.3 | Version 6.6.3 | SQL | 2023-01-23 15:40:28 | Success | No | | Versioned | 6.6.4 | Version 6.6.4 | SQL | 2023-01-23 15:40:32 | Success | No | | Versioned | 6.7.0 | ************ | SQL | 2023-05-10 14:49:21 | Success | No | | Versioned | 6.7.1 | Version 6.7.1 | SQL | 2023-05-10 14:49:22 | Success | No | | Versioned | 6.7.2 | Version 6.7.2 | SQL | 2023-05-10 14:49:25 | Success | No | | Versioned | 6.8.0 | ******************* | SQL | 2023-05-10 14:49:28 | Success | No | | Versioned | 6.4.0 | Version 6.4.0 | SQL | | Ignored (Baseline) | No | +-----------+---------+-----------------------+----------+---------------------+--------------------+----------+
你的Gradle配置:
plugins { id("org.flywaydb.flyway").version("9.11.0") } flyway { locations = arrayOf("classpath:db/migration/v*") val dbId = project.extra["db.id"] as? String ?: "db" url = project.extra["$dbId.url"] as String user = project.extra["$dbId.user"] as String password = project.extra["$dbId.password"] as String }
内容的提问来源于stack exchange,提问作者Beholder
相关产品推荐
相关产品推荐

