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

Liquibase配置failOnError:false、runAlways:false不生效问题咨询

问题根因说明

Liquibase默认仅在变更集完全执行成功时才会向DATABASECHANGELOG表插入执行记录,你配置的failOnError: false仅作用于流程层面:避免变更集执行失败时直接中断整个部署流程,不会为失败的变更集生成执行记录,因此runAlways: false的去重逻辑无法生效。

排查与解决步骤
  • 第一步:确认变更集唯一标识配置正确
    每个变更集的id、author、changelog文件路径共同组成唯一标识,标识变动会被Liquibase识别为新变更集。如果使用SQL格式的changelog,需确保头部注释格式符合规范,示例如下:
    --liquibase formatted sql
    --changeset your_name:20240520001 failOnError:false runAlways:false
    
  • 第二步:手动标记历史失败变更集
    对于已经执行失败的变更集,可以手动向DATABASECHANGELOG表插入一条记录,将EXECTYPE设为MARK_RAN即可让后续执行跳过该变更集,参考插入语句(按需替换对应字段值):
    INSERT INTO DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, DESCRIPTION, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID)
    VALUES ('20240520001', 'your_name', 'changelog/your_target_sql.sql', NOW(), (SELECT MAX(ORDEREXECUTED) FROM DATABASECHANGELOG) + 1, NULL, 'sql', '手动标记失败变更集为已跳过', 'MARK_RAN', NULL, NULL, '你当前使用的Liquibase版本', (SELECT MAX(DEPLOYMENT_ID) FROM DATABASECHANGELOG));
    
    高版本Liquibase支持MD5SUM字段填NULL,低版本需要生成对应变更集的MD5值填入即可。
  • 第三步:配置自动标记规则避免后续出现同类问题
    新增onFail: MARK_RAN属性到变更集配置中,该属性会在变更集执行失败时自动插入MARK_RAN状态的记录到日志表,后续不再重复执行该变更集。
    SQL格式changelog配置示例:
    --changeset your_name:20240520001 failOnError:false onFail:MARK_RAN
    
    YAML格式changelog配置示例:
    databaseChangeLog:
      - changeSet:
          id: 20240520001
          author: your_name
          failOnError: false
          onFail: MARK_RAN
          changes:
            - sqlFile:
                path: your_sql_file_path.sql
    
  • 第四步:验证配置生效
    执行Liquibase更新命令后查看DATABASECHANGELOG表对应变更集的EXECTYPE字段,值为MARK_RAN或EXECUTED即代表配置生效,后续执行不会重复处理该变更集。
注意事项

不要随意修改已经提交过的变更集内容,否则MD5校验不通过会触发重新执行,若需要调整逻辑建议新建变更集处理。
onFail: MARK_RAN仅做跳过执行处理,若变更集对应逻辑是业务必需的,建议先修复SQL问题后删除对应MARK_RAN记录重新执行,避免业务逻辑缺失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:24:02