迁移LiquibaseChangeLog条目

时间:2014-09-15 05:12:18

标签: liquibase

我们正在使用Liquibase来处理我们的DB Schema更改。由于我们已经将大量的ChangeLog分布在多个文件中,并以复杂的文件夹结构排列,因此有时需要或者希望进行一些会影响DatabaseChangeLog表中的元信息的重构。

此类重构的建议是什么?我可以使用Liquibase本身来更新DatabaseChangeLog条目,还是会遇到缓存问题?

一个让我的案例更清晰的简单例子:

  • 我创建了一个新的changeLog文件test / changeLog.xml,默认的logicalFilePath包含一些changeSets
  • 随着文件越来越大,我想将其拆分为多个文件,在一些子文件夹中移动它们,并明确地将logicalFilePath属性设置为“myChanges”'把它们分组
    • 由于这些更改已经运行,我必须更新DATABASECHANGELOG.FILENAME字段,否则Liquibase会认为我已经引入了新的更改集
    • 我需要运行UPDATE DATABASECHANGELOG设置FILENAME =' myChanges'在哪里FILENAME =' test / changelog.xml'
  • 当然,我想以自动方式执行此操作。最好的方法是什么?我可以使用Liquibase吗?或者,在使用新结构运行Liquibase之前,我是否需要以另一种方式更新DATABASECHANGELOG(JDBC或其他)?

感谢您的反馈!

有些跟进:

有时不幸的是,变更集无法适应。考虑以下情况:

  • 我们使用VARCHAR2(255字节)
  • 创建了一个新表
  • 一切都很好,表已部署并填充了数据
  • 我介绍了一个用于测试的嵌入式H2数据库,它不会理解" 255字节"但只有255.对于原始数据库,将其更改为VARCHAR(255)将无法进行差异,但它会改变变更集的校验和,并导致Liquibase错误。
  • 删除并重新创建表格不是一个选项,因为表格已经填充了数据
  • 使用普通Liquibase,我最终会得到一个解决方案,比如创建一个新表,移动我的数据,删除旧表并重命名新表...

1 个答案:

答案 0 :(得分:1)

Liquibase不支持重构changelog文件。它通常希望您在运行后尽可能保持原样,以尽量减少意外差异。

如果您想要搬家,您所概述的步骤就是您需要做的事情。 LogicalFilePath将提供帮助,并且您应该只需要更新databasechangelog.filename列。

在重新组织文件后第一次运行liquibase之前,您需要更新文件名路径,否则它将再次执行changeSet。 Liquibase在启动时立即查看changelog表和changelog文件,因此您需要更新Liquibase之外的filename列。