You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Liquibase回滚策略预测试方法咨询及校验和不匹配问题求解

问题1:Liquibase是否提供无需实际执行即可测试回滚策略的方法?

当然有!Liquibase专门准备了几个实用命令,帮你在不碰真实数据库的前提下验证回滚逻辑:

  • liquibase rollback-sql命令:它只会生成回滚需要执行的SQL语句,不会真的跑起来。你可以直接盯着输出的SQL检查顺序是否合理——比如有没有先删依赖外键的表、再删主表,提前避开外键约束这类坑。
  • 搭配liquibase update-sql一起用:先看变更集的执行SQL,再对比rollback-sql的输出,能更清晰地确认变更和回滚的操作逻辑是反向匹配的。
  • 要是用Liquibase Pro的话,还有liquibase simulate命令,能完整模拟变更+回滚的全过程,完全不影响真实数据,验证起来更全面。
问题2:修正回滚策略后出现校验和不匹配的解决方案

这是新手用Liquibase非常容易踩的坑,别慌,给你几个靠谱的解决办法:

方法1:清除旧校验和(最推荐)

直接执行这条命令:

liquibase clearCheckSums

它会清空Liquibase存在数据库DATABASECHANGELOG表里的旧校验和记录。之后再执行更新或回滚时,Liquibase会重新计算当前变更集的校验和并更新记录,就不会再报不匹配的错误了。

方法2:手动更新数据库里的校验和记录

如果你不想用命令,也可以直接改数据库的DATABASECHANGELOG表:

  1. 找到你修改过的那个变更集对应的行
  2. liquibase calculateCheckSum <你的变更集文件路径>命令算出新的校验和,替换掉MD5SUM字段的旧值就行

方法3:给变更集加validCheckSum属性

在你的变更集里加上这个属性,把旧的校验和值填进去,让Liquibase认为旧值也是有效的:

--liquibase formatted sql
--changeset yourname:1 validCheckSum:旧的MD5值
CREATE TABLE table1 (...);
CREATE TABLE table2 (...);
--rollback DROP TABLE table2; DROP TABLE table1;

不过这个方法更适合临时兼容场景,长期来看,尽量通过新增变更集来修改逻辑,而不是改已经执行过的变更集,能避免很多这类麻烦。

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

火山引擎 最新活动