【问题标题】:Porting Liquibase changelog to different RDBMS将 Liquibase 变更日志移植到不同的 RDBMS
【发布时间】:2020-09-07 08:05:42
【问题描述】:

我们有几个基于 Spring Boot 的服务,它们使用 Liquibase 作为架构迁移工具(基于 Spring Boot 提供的集成)。

由于历史原因,变更日志目前与数据库无关,即它们使用 Oracle 特定的数据类型。但是,我们希望在不久的将来从 Oracle 切换到 PostgreSQL。为了使现有的变更日志与 PostgreSQL 兼容,必须对其进行修改,使 DATABASECHANGELOG 表的现有内容无效,并且服务可能会拒绝启动。

解决这种迁移问题的合适方法是什么?扔掉变更日志历史,使用修改后的变更日志从头开始重建模式,然后迁移数据?有更好的方法吗?

【问题讨论】:

    标签: spring-boot liquibase


    【解决方案1】:

    您可以修改您的变更集以使其对 oracle 和 postgresql 有效,然后在其中提供有效的校验和(也许还有创建它的方法)。

    <changeSet id="id" author="author">
        <validCheckSum></validCheckSum>
        ...
    </changeSet>
    

    当您下次运行 liquibase 时,它​​会根据有效校验和检查校验和,如果没问题,则不会失败。

    有时您会发现最好使用特定数据库中的某些类型(例如 text vs varchar2),这样您就可以对它们进行参数化。这不仅限于类型。

    <property dbms="postgres" name="texttype" value="TEXT"/>
    <property dbms="oracle" name="texttype" value="VARCHAR2"/>
    
    <changeSet id="id" author="author">
        <createTable tableName="testtable">
            <column name="test" type="${texttype}" />
        </createTable>
    </changeSet>
    

    从前面的示例中,您可以看到在某些 liquibase 元素中使用了属性 dbms。有时最好用特定的 dbms 语法编写一些东西,而不是使用一些抽象。

    【讨论】:

      猜你喜欢
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多