我正在导出一个Oracle模式,我想要一个可以用于H2内存测试的脚本。
我使用mavenmvn liquibase:generateChangeLog
导出该模式。
我注意到,当我指定类型为sql
的outputChangeLogFile
时,Oracle和H2格式会产生不同的输出(例如generatedChangelog.h2.sql
和generatedChangelog.oracle.sql
(。
对于类型xml
,它们产生相同的(generatedChangelog.h2.xml
与generatedChangelog.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。