我正在使用 Liquibase 来管理数据库迁移。我面临针对变更集的验证错误。该错误与校验和有关。我使用 Sql 格式进行迁移,即创建 sql 文件。我添加了一个变更集,它成功了,然后我需要修改一个表来添加一个新列,所以我只是编辑了第一个变更集的 Sql 文件,并添加了下面的第二个变更集,然后尝试重新运行。迁移因抱怨第一个变更集的校验和不匹配而失败。这是添加新迁移的正确方法还是我遗漏了一些东西。任何帮助将不胜感激。谢谢
下面是我拥有的示例和类似的 Sql 文件。在第一个变更集成功后,我添加了第二个变更集。顺便说一句,我正在使用 Liquibase 的 dockerized 格式。
--liquibase 格式化的sql --changeset 作者:1 endDelimiter://
如果不存在则创建数据库
cms
/*!40100 默认字符集 utf8 */;//
使用cms
//
如果不存在则创建表 clientProfile
(
clientId
int(11) NOT NULL AUTO_INCRMENT,
clientName
varchar(100) NOT NULL COMMENT '客户端名称')//
--liquibase 格式化的sql --changeset 作者:2 endDelimiter://
使用
cms
//
更改表 clientProfile
修改列 clientName
varchar(255) NOT NULL COMMENT '客户端名称'//
这是预期的行为。 Liquibase 验证已部署变更集的校验和,以确保数据库架构对应于所需状态,并在部署和回滚期间提供幂等性。
这是添加新迁移的正确方法还是我遗漏了一些东西。
不,这不是正确的方法。事实上,永远不要这样做。变更集应该是不可变的、可逆的,并且只应在特殊情况下进行修改 - 例如,当不可能通过应用新的变更集来修复错误时,或者当部署不正确的变更集后产生的风险高于部署错误变更集后产生的风险时它的修改。如果进行此类修改,您必须将以前的变更集校验和添加到变更集中,通常只有当变更集未部署在您的个人一次性开发环境之外的任何地方时,它才是可接受的。