You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中FlywayDB迁移历史表恢复及flywayRepair报错处理

问题解决步骤

1. 先修复flywayRepair的执行错误

你遇到的Configuration with name 'compile' not found是因为旧版Flyway Gradle插件(5.2.4)依赖已被Gradle废弃的compile配置,而新版Java插件默认不再生成该配置。解决方法是在build.gradle中手动声明compile配置:

// 在plugins块之后添加
configurations {
    compile
}

修改后重新执行gradle flywayRepair -i,即可正常运行该命令。flywayRepair的作用是修复schema_history表中记录的校验和与本地脚本的一致性,避免后续校验失败,但它无法自动恢复被删除的历史行。

2. 手动恢复被删除的迁移历史行

Flyway报错column ... already exists,是因为它认为对应的迁移脚本从未执行过(历史表中无记录),但实际上该脚本已经被执行过,数据库中已有对应的结构。你需要手动将被删除的那行数据插回schema_history表:

具体操作:

  • 获取迁移脚本关键信息:
    找到被删除的迁移文件(比如V1__create_user_table.sql),记录以下信息:

    • version:文件名中的版本号(例如1)
    • description:文件名中版本后的描述(例如create_user_table)
    • script:完整脚本文件名(例如V1__create_user_table.sql)
    • checksum:执行gradle flywayInfo -i,输出中会显示每个本地脚本的Checksum值,直接取用即可。
  • 插入历史记录:
    连接PostgreSQL数据库,执行以下插入语句(根据实际数据调整参数):

    INSERT INTO schema_history (
        installed_rank, 
        version, 
        description, 
        type, 
        script, 
        checksum, 
        installed_by, 
        installed_on, 
        execution_time, 
        success
    ) VALUES (
        2,  -- 注意:此值需与现有历史记录的顺序对应,比如现有最后一条的installed_rank是1,这里就填2
        '1', 
        'create_user_table', 
        'SQL', 
        'V1__create_user_table.sql', 
        123456789,  -- 替换为flywayInfo输出的checksum
        '你的数据库用户名', 
        NOW(), 
        100,  -- 执行时间填合理值即可
        true  -- 标记为执行成功
    );
    

3. 验证修复结果

执行gradle flywayInfo,如果输出中所有本地脚本的状态都显示为Success,说明历史表已恢复正常,此时再添加新的迁移脚本即可正常执行。


内容的提问来源于stack exchange,提问作者skyho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 23:59:54