如何在使用例如数据库时区分数据库序列

时间:2012-06-28 13:42:10

标签: liquibase

我刚刚开始使用Liquibase并对问题进行了解释,以区分不同数据库的功能。

我们希望支持多个数据库(Oracle,MySQL,Derby - 三个名称)。

所有人都有不同的能力。在特定的Oracle支持sequences,而MySQL和Derby不支持。

当我让hibernate生成DDL时,我可以选择不同的方言,它会考虑这些不同的功能,并在使用Oracle时生成Sequencer,并在使用Derby或MySQL时使用普通表(用于ID生成)。

现在,我知道我可以通过在oracle属性中指定“dbms”来约束更改集。但是,我如何为其他数据库执行普通表解决方案? dbms似乎没有“非oracle”属性。

其他人如何处理这个问题? (我在liquibase页面和论坛上找不到任何相关内容。)

2 个答案:

答案 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执行该变更集。