假设我有3个提交(每个提交都添加了新的迁移):
生产数据库位于
v1
,我的开发数据库位于v3
。我想生成一个SQL脚本,它将生产数据库升级到
v3
。我唯一知道的方法是将开发数据库回滚到
v1
(通过 check out v1
并运行dbm-rollback
),然后 check out v3
并运行dbm-update-sql
。有没有一种方法可以做到不回退开发数据库(或破坏
DATABASECHANGELOG
表)?像dbm-update-count-sql 2
这样的东西将为最后两次迁移创建SQL,无论它们是否已经在开发中运行。编辑:无法从开发机器连接到产品数据库
最佳答案
如果您使用updateSQL生成SQL,则Liquibase不会更改您所指向的数据库,它只会生成将在常规更新中执行的内容。因此,最简单的选择是仅对生产数据库运行updateSQL以获得更新它所需的脚本。
如果那不适合您,如果您能够将DATABASECHANGELOG表备份/还原到另一个数据库(甚至是空白数据库)并对该数据库运行updateSQL,它将输出相同的SQL。
最后,在运行updateSQL时,可以使用"offline mode"使用CSV文件作为DATABASECHANGELOG表。使用空表运行将生成所有更新SQL,但是如果仅在生产中包含文件中的更改,则updateSQL将输出更新生产所需的内容。