0

我可以使用 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 命令并手动运行它。

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

4

1 回答 1

0

我建议阅读命令行文档

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

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

更新

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

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

方法一:新建 DEV 数据库

运行 SQL 查询并确定您的开发数据库中有多少变更集:

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

分析日期并确定有多少 chnageset 会将您从版本 3.0 带回 2.0(2 个变更集)和 1.0(4 个变更集)

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

liquibase update

为版本 2.0 -> 3.0 升级创建 SQL

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

并为版本 1.0 -> 3.0 升级创建 SQL

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

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

另一个真正有用的数据库管理工具是dbunit

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

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

于 2012-12-08T09:34:41.163 回答