我可以使用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命令并手动运行它。
回滚有一个问题,如果我回滚我的开发数据库,我需要重新创建它上面的数据。对此有什么建议吗?
答案 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变更集来管理您的数据,因此需要考虑一些替代方案....
运行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
另一个非常有用的数据库管理工具是dbunit
以下文章解释了liquibase和dbunit如何一起用于迁移数据库:
这两个工具是互补的。在您的情况下,您可以定期保存开发数据的快照,并使用它来重新填充开发或测试数据库(显然,数据集对数据库模式的版本很敏感,因此需要注意)