我建议阅读命令行文档。
要根据日期生成 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 来迁移数据库:
这两种工具是互补的。在您的情况下,也许您可以定期保存开发数据的快照并使用它来重新填充开发或测试数据库(显然数据集对数据库模式的版本很敏感,因此需要注意)