假设我有3个提交(每个提交都添加了新的迁移):

  • v3(添加新列)
  • v2(添加新表)
  • v1

  • 生产数据库位于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将输出更新生产所需的内容。

    10-04 14:13