使用liquibase以H2格式导出Oracle数据库架构."sql"和"xml"



我正在导出一个Oracle模式,我想要一个可以用于H2内存测试的脚本。

我使用mavenmvn liquibase:generateChangeLog导出该模式。

我注意到,当我指定类型为sqloutputChangeLogFile时,Oracle和H2格式会产生不同的输出(例如generatedChangelog.h2.sqlgeneratedChangelog.oracle.sql(。

对于类型xml,它们产生相同的(generatedChangelog.h2.xmlgeneratedChangelog.oracle.xml(。

特别是,使用sql类型,我可以获得

  • NAME VARCHAR(255) NOT NULL用于H2
  • 适用于Oracle的NAME VARCHAR2(255 BYTE) NOT NULL

使用xml格式,我得到

  • 适用于H2和Oracle的<column name="NAME" type="VARCHAR2(255 BYTE)">

这个特定的语法对H2无效,所以对我来说这似乎是一个错误。Liquibase可以清楚地理解这一点,正如你从sql示例中看到的那样,但它不会为xml格式生成有效的changeSet

我能做些什么来产生xml格式的正确输出吗?

感谢

不同的数据库之间有很多差异。您可以(手动或通过一些正则表达式(创建changeLog变量并执行以下操作:

  • 更改列定义
<column name="NAME" type="VARCHAR2(255${byteType})">
  • 为不同的数据库供应商添加变量
<property name="byteType" dbms="oracle" value="BYTE"/>
<property name="byteType" dbms="h2" value=""/>

通过以上更改,您将能够对这两个(或几乎任何(数据库运行changeSet。

最新更新