没有前置条件的 Liquibase 变更集
Posted
技术标签:
【中文标题】没有前置条件的 Liquibase 变更集【英文标题】:Liquibase Changeset without precondition 【发布时间】:2020-05-04 07:25:21 【问题描述】:如果我们没有在变更集中添加前置条件并运行两次会发生什么? 它会被标记为默认运行吗? 例如,这是变更集:
<changeSet id="xxx" author="kurkesh">
<createProcedure>DO $$ BEGIN
CREATE TYPE enum_mobile AS ENUM('android', 'ios', 'WINDOWS');
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
</createProcedure>
</changeset>
【问题讨论】:
【参考方案1】:是的,您的 changeSet 将被标记为 EXECUTED,并且不会再次执行。
当你第一次执行你的 changeSet 时,Liquibase 会在 databasechangelog
表中记下 id 为 "xxx" 的 changeSet 已成功运行。
当您第二次尝试执行此 exact 更改集时,Liquibase 将检查 databasechangelog
表。如果有changeSet“xxx”的记录(执行成功),那么这个changeSet会被忽略,不会第二次执行。
但忽略前置条件不是一个好主意。有一天,有人会编写另一个基本相同的 changeSet,而您的应用程序将失败,因为您不能两次创建相同的枚举。
有关 Liquibase 如何存储有关已执行变更集的数据的更多信息,请查看question。
【讨论】:
以上是关于没有前置条件的 Liquibase 变更集的主要内容,如果未能解决你的问题,请参考以下文章