Flyway社区版存在Undo迁移文件是否触发命名格式错误?
问题解答
核心问题结论
是的,Flyway Community版本在开启flyway.validateMigrationNaming=true的前提下,只要迁移目录(locations)中存在以U开头的Undo迁移文件(如U1.1__description1undo.h2.sql),即便不执行flyway undo命令,执行flyway info、flyway validate、flyway migrate等常规操作时,都会触发「Invalid SQL filenames found」「Unrecognised migration name format」这类错误。
原因在于Flyway Community版本本身不支持Undo迁移功能,其命名规则仅认可V(版本迁移)、R(重复迁移)、B(基线迁移)开头的文件格式,U开头的命名属于Teams版本专属,社区版的命名校验逻辑会直接判定这类文件格式非法。
现有体验痛点
当前社区版的报错体验存在以下不足:
- 错误信息晦涩,未明确告知用户
U开头的迁移文件仅支持Teams版本,导致用户难以快速定位问题根源 - 无配置项可忽略
U开头的文件,无法满足在社区版环境中保留Teams版本预备文件的需求 - 直接触发操作失败而非警告,打断常规迁移流程
示例错误日志:
... DEBUG: Validating V1.0__description0.h2.sql DEBUG: Validating U1.1__description1undo.h2.sql DEBUG: Validating V1.1__description1.h2.sql DEBUG: Validating V1.2__description2.h2.sql ERROR: Unexpected error org.flywaydb.core.api.FlywayException: Invalid SQL filenames found: Unrecognised migration name format: U1.1__description1undo.h2.sql at org.flywaydb.core.internal.resource.ResourceNameValidator.validateSQLMigrationNaming(ResourceNameValidator.java:59) at org.flywaydb.core.FlywayExecutor.execute(FlywayExecutor.java:144) at org.flywaydb.core.Flyway.info(Flyway.java:193) at org.flywaydb.commandline.Main.main(Main.java:179)
优化建议
为提升社区版用户体验,建议:
- 输出更友好的提示信息:明确告知「'U' 开头的迁移文件仅支持Flyway Teams版本」
- 新增配置项,允许用户忽略
U开头的迁移文件 - 将此类命名问题降级为警告而非直接报错,不中断常规操作流程
用户需求场景
期望在Flyway Community版本的迁移目录中保留U开头的Undo迁移示例文件(用于后续升级到Teams版本时直接使用),同时不触发上述晦涩的命名格式错误。
内容的提问来源于stack exchange,提问作者Sered
相关产品推荐
相关产品推荐

