首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >液基变送器不能重新运行

液基变送器不能重新运行
EN

Stack Overflow用户
提问于 2021-09-27 20:35:18
回答 2查看 1.1K关注 0票数 1

我们的Liquibase脚本无法重新运行,因为基础列已经离开了

请考虑以下更改:

创建了表"foo“,”“是该表中的列之一;

  1. (以索引的形式)从表”foo“中删除了列”
  2. “中的约束。

现在,当我们尝试重新运行所有的液化基脚本(基于已经存在的DB结构)时,changeset 2将失败

代码语言:javascript
复制
[ERROR]      Reason: liquibase.exception.DatabaseException: ERROR: column "domain" named in key does not exist

这都是因为实际DB中的“域”列在运行changeset 2之前已经消失了。

除了在表中重新创建“域”列之外,还有什么更好的方法可以使这些变更集运行,以便所有三个变更集都能运行?

除了上面的2,系统中还有数百个变更集;preConditions

  • 强烈倾向于避免任何手动步骤,因为在许多环境中,更改集必须重新运行;在完美的世界中,开发人员应该在changeset 2上放置一个

  • ,以检查不仅缺少索引,而且底层列存在,而且我们必须处理我们拥有的内容。我的理解是,在清算基础上强烈反对重写现有的变更集。
EN

回答 2

Stack Overflow用户

发布于 2021-09-27 20:46:24

您可以始终将一个preCondition添加到changeSets #2和#3中,以检查domain列是否存在,例如:

代码语言:javascript
复制
    <preConditions onFail="MARK_RAN">
        <columnExists tableName="foo" columnName="domain"/>
    </preConditions>

如果这些changeSets将因“不同的校验和错误”而开始失败,则可以始终提供新的校验和或只添加<validCheckSum>ANY</validCheckSum>。这样,您就可以在所需的所有环境中运行这些changeSets。

不鼓励重写changeSets,但鼓励为changeSets编写preConditions。

票数 0
EN

Stack Overflow用户

发布于 2021-09-28 19:33:26

根据注释,您的问题是更改liquibase脚本目录位置。

实际上,liquibase会比较liquibase脚本在脚本中执行这些changesets时的相对路径。您可以在databasechangelog表和列filename下面找到这个相对路径。

首先,您应该理解的是,问题不在于checksum。所以这解决不了你的问题。

您可以做的最简单的事情是更改表filename中列databasechangelog中的值。如果您有多个liquibase脚本文件,我建议您逐个修改它们。像这样的简单sql查询可以完成这项工作。

代码语言:javascript
复制
update databasechangelog set filename='<new_filename>' where filename='<old_filename>'

注意:如果你做错了,情况会变得更糟。在进行任何更改之前,请确保重复检查所有内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69352966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档