如何在Liquibase期间获得变更集

时间:2012-12-07 16:51:22

标签: liquibase

我可以使用liquibase来更改我的数据库架构,这很好。 但我需要在一段时间内获得变更集,例如

1/1: add table1 => 1.0
1/10: add table2
1/18: alter table1 => 2.0
1/21: alter table2 
1/28: add table3 => 3.0

如果我想从1 / 10~1 / 28或1 / 18~1 / 21获得变更集(SQL命令),是否可能?

[更新]感谢Mark的回复,我在我们的开发环境中添加了以上变更集中的版本。当我们的生产数据库是1.0并且我想直接升级到2.0(或3.0)但只想使用liquibase生成SQL命令并手动运行它。

回滚有一个问题,如果我回滚我的开发数据库,​​我需要重新创建它上面的数据。对此有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我建议您阅读command line documentation

要根据日期生成SQL,我认为可以完成的唯一方法如下:

liquibase rollbackToDate <date/time> 
liquibase tag <version so can rollback here again>
liquibase updateSQL > keepUpdate.sql
liquibase update

更新

您尝试执行的操作(使用SQL更新生产)是liquibase旨在支持的常见用例。这是我最喜欢的功能之一。

问题是......在一个理想的世界中,你应该能够吹走你的dev数据库并从头开始。显然,您没有liquibase变更集来管理您的数据,因此需要考虑一些替代方案....

方法1:创建新的DEV数据库

运行SQL查询并确定开发数据库中有多少个changset:

SELECT ORDEREXECUTED, DATEEXECUTED, ID, FILENAME, DESCRIPTION, COMMENTS 
FROM DATABASECHANGELOG 
ORDER BY ORDEREXECUTED

分析日期并确定从3.0版到2.0版(2个变更集)和1.0个版本(4个变更集)可以带回多少个chnagesets

创建一个新数据库并应用您的liquibase变更集,将您的架构升级到3.0版

liquibase update

为版本2.0创建SQL - &gt; 3.0升级

liquibase rollbackCount 2
liquibase updateSQL         > upgrade-2_0-3_0.sql
liquibase futureRollbackSQL > rollback-2_0-3_0.sql

为版本1.0创建SQL - &gt; 3.0升级

liquibase rollbackCount 2
liquibase updateSQL         > upgrade-1_0-3_0.sql
liquibase futureRollbackSQL > rollback-1_0-3_0.sql

方法2:使用dbunit保存数据集

另一个非常有用的数据库管理工具是dbunit

以下文章解释了liquibase和dbunit如何一起用于迁移数据库:

这两个工具是互补的。在您的情况下,您可以定期保存开发数据的快照,并使用它来重新填充开发或测试数据库(显然,数据集对数据库模式的版本很敏感,因此需要注意)