【问题标题】:Liquibase - TagDatabase changeset updates the previous changeset with the tag as wellLiquibase - TagDatabase 变更集也使用标签更新先前的变更集
【发布时间】:2014-05-20 13:53:40
【问题描述】:

我想在更改日志文件中使用以下更改集标记数据库,以备将来回滚。当我应用此变更集时,我在 databasechangelog 中注意到之前的变更集也使用标记进行了更新。

变更日志文件中的变更集

`<changeSet author="Major Version" id="2.0"> 
 <tagDatabase tag="version_2.0"/>
 </changeSet> `

下面是数据库更改日志表的摘录,function51 是之前运行的变更集

===&gt;function51|| sr || ./db-changelog.xml || 05-APR-14 12.34.46.975900000 || 15 || EXECUTED || 7:5616f4adba7690fafd882b3a607c3eca || sqlFile || **version_2.0** || 3.1.1

`===>2.0 ||    Major Version  ||   ./db-ApplyTag.xml ||    05-APR-14 12.37.24.140637000    || 16 ||    EXECUTED  ||   7:97fe9eb435a72fdfbe27647efa5be97d  ||   tagDatabase       ||  **version_2.0** ||    3.1.1`

有人遇到过吗?我正在使用 Liquibase 3.1.1

谢谢。

【问题讨论】:

    标签: liquibase


    【解决方案1】:

    原因是当 Liquibase 运行时,changeSet 中的逻辑被运行,然后在 databasechangelog 表中被标记为已运行。所以在 tagDatabase 的情况下,最后一次运行的 changeSet 是之前执行的。

    回滚逻辑应该仍然对您正常工作,因为回滚到 version_2.0 将使您回到 function51 作为最后一个执行的 changeSet。再次运行更新会将其重新标记为 version_2.0,但这很好。

    【讨论】:

    • 感谢内森的回复。我知道它会标记最新的变更集,所以我假设它会首先运行 TagDatabase ChangeSet 并更新版本。但现在我有两个以 version_2.0 作为标签的变更集。回滚工作正常,因为它将回滚所有变更集,直到在这种情况下遇到标签 version_2.0。因此,要删除 Database 标记变更集,我必须使用 rollbackCount 1 将其从 databasechangelog 表中删除。希望这是要采取的方法。
    • 是的,听起来不错
    猜你喜欢
    • 2018-01-01
    • 2015-11-25
    • 2023-04-02
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多