我们的Liquibase脚本无法重新运行,因为基础列已经离开了
请考虑以下更改:
创建了表"foo“,”“是该表中的列之一;
现在,当我们尝试重新运行所有的液化基脚本(基于已经存在的DB结构)时,changeset 2将失败
[ERROR] Reason: liquibase.exception.DatabaseException: ERROR: column "domain" named in key does not exist这都是因为实际DB中的“域”列在运行changeset 2之前已经消失了。
除了在表中重新创建“域”列之外,还有什么更好的方法可以使这些变更集运行,以便所有三个变更集都能运行?
除了上面的2,系统中还有数百个变更集;preConditions
发布于 2021-09-27 20:46:24
您可以始终将一个preCondition添加到changeSets #2和#3中,以检查domain列是否存在,例如:
<preConditions onFail="MARK_RAN">
<columnExists tableName="foo" columnName="domain"/>
</preConditions>如果这些changeSets将因“不同的校验和错误”而开始失败,则可以始终提供新的校验和或只添加<validCheckSum>ANY</validCheckSum>。这样,您就可以在所需的所有环境中运行这些changeSets。
不鼓励重写changeSets,但鼓励为changeSets编写preConditions。
发布于 2021-09-28 19:33:26
根据注释,您的问题是更改liquibase脚本目录位置。
实际上,liquibase会比较liquibase脚本在脚本中执行这些changesets时的相对路径。您可以在databasechangelog表和列filename下面找到这个相对路径。
首先,您应该理解的是,问题不在于checksum。所以这解决不了你的问题。
您可以做的最简单的事情是更改表filename中列databasechangelog中的值。如果您有多个liquibase脚本文件,我建议您逐个修改它们。像这样的简单sql查询可以完成这项工作。
update databasechangelog set filename='<new_filename>' where filename='<old_filename>'注意:如果你做错了,情况会变得更糟。在进行任何更改之前,请确保重复检查所有内容。
https://stackoverflow.com/questions/69352966
复制相似问题