我刚刚开始使用Liquibase并对问题进行了解释,以区分不同数据库的功能。
我们希望支持多个数据库(Oracle,MySQL,Derby - 三个名称)。
所有人都有不同的能力。在特定的Oracle支持sequences
,而MySQL和Derby不支持。
当我让hibernate生成DDL时,我可以选择不同的方言,它会考虑这些不同的功能,并在使用Oracle时生成Sequencer
,并在使用Derby或MySQL时使用普通表(用于ID生成)。
现在,我知道我可以通过在oracle
属性中指定“dbms
”来约束更改集。但是,我如何为其他数据库执行普通表解决方案? dbms
似乎没有“非oracle”属性。
其他人如何处理这个问题? (我在liquibase页面和论坛上找不到任何相关内容。)
答案 0 :(得分:3)
尝试在changset上使用precondition。支持布尔运算。
例如
<preConditions onFail="CONTINUE">
<or>
<dbms type="oracle" />
<dbms type="mysql" />
</or>
</preConditions>
答案 1 :(得分:0)
另一种方法是将所有序列放在changlog文件中,并在主变更日志中include
,然后执行以下操作:
<changeSet
dbms="oracle,db2,db2i"
author="mccallim (generated)"
id="1419011907193-1"
>
<createSequence
schemaName="${main.schema}"
...
仅对列出的DBMS执行该变更集。