2

我刚开始使用Liquibase并偶然发现了区分不同数据库功能的问题。

我们希望支持多个数据库(Oracle、MySQL、Derby - 仅举三例)。

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

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

oracle现在,我知道我可以通过在dbms属性中指定 ' ' 来约束变更集。但是,我怎样才能为其他数据库做简单的表解决方案呢?似乎没有 'not oracle' 属性dbms

其他人如何处理这个?(我在 liquibase 页面和论坛上都找不到任何关于它的信息。)

4

2 回答 2

3

尝试在变更集上使用先决条件。支持布尔运算。

例如

 <preConditions onFail="CONTINUE">
     <or>
         <dbms type="oracle" />
         <dbms type="mysql" />
     </or>
 </preConditions>
于 2012-06-28T18:58:56.980 回答
0

另一种方法是将所有序列放入include主更改日志中的 changlog 文件中,然后执行以下操作:

<changeSet
    dbms="oracle,db2,db2i"
    author="mccallim (generated)"
    id="1419011907193-1"
>
    <createSequence
        schemaName="${main.schema}"
...

该变更集仅对列出的 DBMS 执行。

于 2015-04-08T11:07:21.210 回答