将 Liquibase 变更日志移植到不同的 RDBMS
Porting Liquibase changelog to different RDBMS
我们有几个 Spring 基于 Boot 的服务,它们使用 Liquibase 作为架构迁移工具(基于 Spring Boot 提供的集成)。
由于历史原因,变更日志目前与数据库无关,即它们使用 Oracle 特定的数据类型。但是,我们希望在不久的将来从 Oracle 切换到 PostgreSQL。为了使现有的变更日志与 PostgreSQL 兼容,必须对其进行修改,使 DATABASECHANGELOG
table 的现有内容无效,并且服务可能会拒绝启动。
什么是解决此迁移的 suitable 方法?丢弃变更日志历史记录,使用修改后的变更日志从头开始重建架构,然后迁移数据?有没有更好的方法?
您可以修改您的变更集以使其对 oracle 和 postgresql 有效,然后在其中提供有效的校验和(也许还有创建它的方法)。
<changeSet id="id" author="author">
<validCheckSum></validCheckSum>
...
</changeSet>
当你 运行 liquibase 下次它会根据有效校验和检查校验和,如果没问题,它就不会失败。
有时您会发现使用特定数据库中的某些类型(例如 text 与 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 语法编写一些东西而不是使用一些抽象。
我们有几个 Spring 基于 Boot 的服务,它们使用 Liquibase 作为架构迁移工具(基于 Spring Boot 提供的集成)。
由于历史原因,变更日志目前与数据库无关,即它们使用 Oracle 特定的数据类型。但是,我们希望在不久的将来从 Oracle 切换到 PostgreSQL。为了使现有的变更日志与 PostgreSQL 兼容,必须对其进行修改,使 DATABASECHANGELOG
table 的现有内容无效,并且服务可能会拒绝启动。
什么是解决此迁移的 suitable 方法?丢弃变更日志历史记录,使用修改后的变更日志从头开始重建架构,然后迁移数据?有没有更好的方法?
您可以修改您的变更集以使其对 oracle 和 postgresql 有效,然后在其中提供有效的校验和(也许还有创建它的方法)。
<changeSet id="id" author="author">
<validCheckSum></validCheckSum>
...
</changeSet>
当你 运行 liquibase 下次它会根据有效校验和检查校验和,如果没问题,它就不会失败。
有时您会发现使用特定数据库中的某些类型(例如 text 与 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 语法编写一些东西而不是使用一些抽象。