Flyway回滚脚本命名疑问:R/U前缀不生效,如何正确命名?
Flyway回滚脚本命名问题解答
首先要明确核心点:你当前使用的flyway-core是Flyway社区版,R(Rollback)和U(Undo)前缀的回滚脚本是Flyway商业版(Enterprise/Teams)专属功能,社区版并不支持——这就是你遇到"不符合文件名规范"提示的根本原因。
社区版的回滚实现方式
社区版没有自动回滚机制,只能通过手动编写反向变更的迁移脚本完成回滚,命名必须严格遵循社区版的迁移脚本规范:
- 前缀固定用
V,后跟版本号、双下划线,再添加清晰的描述 - 例如,针对已执行的
V1.0.0__Alter_Student_Schema.sql,你需要创建V1.0.1__Rollback_Alter_Student_Schema.sql,在该脚本中编写撤销之前变更的SQL(比如删除新增列、回滚表结构修改等) - 执行
flyway migrate命令时,这个新的V版本脚本会被当作普通迁移执行,从而实现回滚效果
若要使用R/U前缀的自动回滚
如果想使用Flyway文档中提到的R/U前缀回滚脚本,你需要做以下调整:
- 升级到Flyway商业版(Enterprise或Teams)
- 将依赖替换为商业版坐标(例如
flyway-enterprise) - 确保回滚脚本与对应的正向迁移严格匹配:
- 针对
V1.0.0__Alter_Student_Schema.sql,回滚脚本命名为U1.0.0__Alter_Student_Schema.sql(Undo脚本)或R1.0.0__Alter_Student_Schema.sql(Rollback脚本,具体命名规则以对应商业版版本的文档为准)
- 针对
- 在配置中启用Flyway回滚相关参数(比如
flyway.undoableMigrationPrefix等)
关于V前缀脚本"正常运行"的说明
你用V1.0.0__Alter_Student_Schema.sql作为回滚脚本时,Flyway并非将其识别为回滚操作,而是当作普通的正向迁移脚本执行。如果该版本未被执行过,脚本会正常运行;但如果之前已经执行过V1.0.0版本,再次运行会提示版本已存在,无法重复执行——这并不是真正的回滚逻辑。
内容的提问来源于stack exchange,提问作者Tom Leonardo
相关产品推荐
相关产品推荐

