Liquibase:如何始终将变更集作为最后一次更新操作运行

问题描述 投票:4回答:2

我在我的项目中使用Liquibase并且需要在每次Liquibase更新后执行一个程序...

目前,changeSet看起来像这样:

<changeSet id="liquibase-0" author="liquibase" runAlways="true">
   <sqlFile relativeToChangelogFile="true" path="procedure/owner-changer.sql"/>
</changeSet>

如何确保此changeSet将作为上次更新操作运行?

THKS

liquibase
2个回答
3
投票

我会通过将变更集拆分为两个文件来完成此操作:一个包含“常规”变更集,另一个包含此单个变更集。然后以正确的顺序创建一个包含两者的新“主”变更集:

<databaseChangeLog>

  <include file="standard_changes.xml" relativeToChangelogFile="true"/>
  <include file="change_owner.xml" relativeToChangelogFile="true"/>

</databaseChangeLog>

change_owner.xml仅包含您在问题中显示的单个变更集。

这并不保证它总是最后运行,因为您仍然可以以不同的顺序手动运行两个更改集,但如果您始终运行master.xml,那么您可以确保最后执行“更改所有者”。

从理论上讲,您可以将“master”更改日志与当前文件的名称相同。但由于文件名是变更集的“签名”的一部分,如果您已经通过现有文件部署了更改,我不会这样做。


2
投票

自Liquibase 3.5.0以来,新的runOrder属性有两个可能的值:firstlast。将changeSet作为最后一个运行的示例:

<changeSet id="123" author="author0" runAlways="true" runOrder="last">
    <sql> ... </sql>
</changeSet>

它尚未在文档中描述。发行说明:http://www.liquibase.org/2016/04/liquibase-3-5-0-released.html

© www.soinside.com 2019 - 2024. All rights reserved.