【发布时间】:2014-11-08 13:48:58
【问题描述】:
我们正在使用 Liquibase 来处理我们的数据库架构更改。由于我们已经有相当多的 ChangeLogs 分布在多个文件中,并以复杂的文件夹结构排列,因此有时需要或希望进行一些重构,这些重构会影响 DatabaseChangeLog 表中的元信息。
对此类重构有什么建议?我可以使用 Liquibase 本身来更新 DatabaseChangeLog 条目还是会遇到缓存问题?
一个简单的例子让我的情况更清楚:
- 我创建了一个新的 changeLog 文件 test/changeLog.xml,其中包含一些 changeSets 的默认logicalFilePath
- 随着文件变大,我想将其拆分为多个文件,将它们移动到一些子文件夹中,并将logicalFilePath 属性显式设置为“myChanges”以对它们进行分组
- 由于这些更改已经运行,我必须更新 DATABASECHANGELOG.FILENAME 字段,否则 Liquibase 会认为我引入了新的更改集
- 我需要运行 UPDATE DATABASECHANGELOG set FILENAME='myChanges' WHERE FILENAME='test/changelog.xml'
- 当然,我想以自动化的方式进行。最好的方法是什么?我可以使用 Liquibase 本身吗?或者在使用新结构运行 Liquibase 之前,我是否需要以其他方式(JDBC 或其他方式)更新 DATABASECHANGELOG?
感谢您的反馈!
一些跟进:
有时很遗憾,无法调整变更集。考虑以下情况:
- 我们使用 VARCHAR2(255 字节)创建了一个新表
- 一切正常,表已部署并填充了数据
- 我引入了一个用于测试的嵌入式 H2 数据库,它无法理解“255 字节”,但只有 255。对于原始数据库,将其更改为 VARCHAR(255) 不会有任何影响,但会更改校验和变更集并导致 Liquibase 错误。
- 删除并重新创建表格也不是一种选择,因为表格已经填充了数据
- 使用普通的 Liquibase,我最终会得到一个解决方案,例如创建一个新表、移动我的数据、删除旧表并重命名新表...
【问题讨论】:
标签: liquibase