【发布时间】:2021-11-19 23:28:54
【问题描述】:
我们的 Liquibase 脚本无法重新运行,因为基础列已经消失了
考虑以下变更集:
- 创建了一个表“foo”,并且“domain”是该表中的列之一;
- 约束(以索引的形式)放置在“域”列上;
- 列“domain”已从表“foo”中删除。
现在,当我们尝试重新运行所有 liquibase 脚本(在已经存在的数据库结构上)时,变更集 2 失败
[ERROR] Reason: liquibase.exception.DatabaseException: ERROR: column "domain" named in key does not exist
都是因为实际数据库中的“域”列在变更集 2 运行之前已经消失。
除了重新创建表中的“域”列以便所有 3 个变更集都可以运行之外,还有什么更好的方法可以使这些变更集可运行?
- 系统中除了以上 2 个变更集外,还有数百个变更集;
- 强烈建议该解决方案避免任何手动步骤,因为有许多环境必须重新运行变更集;
- 在理想情况下,开发人员会在变更集 2 上放置 preConditions 以检查不仅缺少索引,而且基础列是否存在,但我们必须处理我们拥有的内容.据我了解,在 liquibase 中强烈建议不要重写现有的变更集。
【问题讨论】:
-
问题是为什么你需要重新运行每个
changeset?即使数据库已经与所有更改保持同步! -
@ray 我们的特殊问题是在我们的一组环境中,liquibase 脚本从错误的目录运行。现在,当我们尝试将它们移动到正确的目录时,liquibase 运行失败,因为文件移动到另一个目录被视为更改。因此,我们决定重新运行新(实际上是旧)目录中的所有 liquibase 脚本。
标签: postgresql liquibase