如何一次回滚多个databaseChangeLog文件

问题描述 投票:0回答:1

我使用给定的ChangeLog XML文件执行liquibase更新命令,并使用tag1对其进行标记。

例如:

liquibase --driver=org.postgresql.Driver --url=... --changeLogFile=change1.xml update
liquibase --driver=org.postgresql.Driver --url=... --tag tag1

然后我用其他ChangeLog XML文件执行几个其他更新命令:

liquibase --driver=org.postgresql.Driver --url=... --changeLogFile=change2.xml update
liquibase --driver=org.postgresql.Driver --url=... --changeLogFile=change3.xml update

现在我想回滚到tag1:

liquibase --driver=org.postgresql.Driver --url=... --changeLogFile=??? rollback tag1

我应在--ChangeLogFile中指定哪个文件?有没有一种方法可以定义多个文件? Liquibase有没有一种方法可以存储嵌入的回滚命令而无需提供更新XML?]

liquibase rollback
1个回答
0
投票

而不是从命令行使用多个变更日志文件,典型的用法是只具有一个用于整个应用程序的变更日志文件。可能有多个变更日志,但是在这种模式下,您只有一个“主”变更日志,然后包括其他变更日志。有关某些示例,请参见https://www.liquibase.org/bestpractices.html

回滚时,liquibase需要知道实际的更改,因此它可以做其他事情来回滚。 DATABASECHANGELOG表不存储已应用的每个变更集的实际内容,它仅保留ID,作者,文件路径和校验和。它无法知道文件123778steve的变更集ID changelog.xml是创建表,变更列还是任何东西。因此,changelog文件必须存在,以便能够回滚。

对于某些更改类型,例如'create table',Liquibase可以'自动'为您生成回滚-它只是'drop table'。但是,如果更改类似于“删除表”,则它无法生成回退-drop table命令仅具有要删除的表的名称,并且不知道该表中有哪些列,等等。

因此Liquibase要求您始终提供一个changelog文件,并且如果您希望能够进行回滚,则可能还需要指定如何回滚每个更改。

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