Flyway能否用相同版本名不同描述识别并执行SQL脚本?
版本名必须唯一,你的需求无法直接实现
Flyway的核心逻辑就是靠唯一的版本标识追踪数据库变更,版本号是判断脚本是否已执行的核心依据:
- 要是你给多个SQL文件用相同版本名,哪怕描述不一样,Flyway也会直接报错,提示存在重复版本的迁移脚本——它把版本号当成了判断唯一性的关键,描述只是个备注,不参与执行逻辑的判断。
- Flyway不会通过“描述”来识别脚本是否存在,历史表的唯一约束核心就是版本号,相同版本号的脚本不管描述啥样,都会被判定为重复。
如果你的核心需求是“只执行没在历史表中出现过的脚本”,又不想用递增版本号,可以试试Flyway的可重复迁移:
- 这类脚本用
R__做前缀(比如R__create_user_index.sql),没有固定版本号,Flyway会根据脚本内容的哈希值判断要不要执行:内容变了就重新跑,哈希值和历史记录一致就跳过。 - 你可以在文件名里加不同描述区分脚本(比如
R__add_order_table_index.sql、R__update_user_role_constraint.sql),既能满足识别需求,也能实现“未执行过(或内容变更)才执行”的逻辑。
内容的提问来源于stack exchange,提问作者user2880496
相关产品推荐
相关产品推荐

