从迁移中生成 SQL 而无需全部删除
Posted
技术标签:
【中文标题】从迁移中生成 SQL 而无需全部删除【英文标题】:Generating SQL from migrations without drop-all 【发布时间】:2015-01-21 00:28:11 【问题描述】:假设我有 3 个提交(每个都添加了新的迁移):
v3(添加新列) v2(添加新表) v1生产数据库位于v1
,我的开发数据库位于v3
。
我想生成一个 SQL 脚本,它将生产数据库升级到 v3
。
我知道如何做到这一点的唯一方法是将开发数据库回滚到v1
(通过签出v1
并运行dbm-rollback
)然后签出v3
并运行dbm-update-sql
。
有没有办法在不回滚开发数据库的情况下执行此操作(或破解DATABASECHANGELOG
表)?像 dbm-update-count-sql 2
这样的东西会为最后两次迁移创建 SQL,无论它们是否已经在开发中运行。
编辑:无法从开发机器连接到 prod 数据库
【问题讨论】:
【参考方案1】:如果您使用 updateSQL 生成 SQL,Liquibase 不会更改您指向的数据库,它只会生成在正常更新时会执行的内容。因此,最简单的选择是对您的生产数据库运行 updateSQL 以获取更新它所需的脚本。
如果这对您不起作用,如果您能够将 DATABASECHANGELOG 表备份/恢复到另一个数据库(甚至是空白数据库)并针对该数据库运行 updateSQL,它将输出相同的 SQL。
最后,您可以使用"offline mode" 在运行 updateSQL 时使用 CSV 文件充当 DATABASECHANGELOG 表。使用空表运行将生成所有更新 SQL,但如果您仅包含生产中文件中的更改,updateSQL 将输出更新生产所需的内容。
【讨论】:
【参考方案2】:如果您可以连接到生产数据库,您只需使用 updateSQL 命令运行 liquibase。
【讨论】:
无法连接到 prod 数据库 :(以上是关于从迁移中生成 SQL 而无需全部删除的主要内容,如果未能解决你的问题,请参考以下文章