Liquibase 当使用例如序列时,如何区分数据库

Liquibase 当使用例如序列时,如何区分数据库,liquibase,Liquibase,我刚刚开始使用这个问题,并对其进行了深入研究,以区分不同数据库的功能 我们希望支持多个数据库(Oracle、MySQL、Derby等等) 它们都有不同的能力。在特定情况下,Oracle支持序列,而MySQL和Derby不支持序列 P>当我让Hibernate生成DDL时,我可以选择不同的方言,并且在使用Oracle并使用普通表(ID生成)时使用德比或MySQL时,它会考虑这些不同的能力并生成排序器< /代码>。p> 现在,我知道我可以通过在dbms属性中指定“oracle”来约束变更集。但是,

我刚刚开始使用这个问题,并对其进行了深入研究,以区分不同数据库的功能

我们希望支持多个数据库(Oracle、MySQL、Derby等等)

它们都有不同的能力。在特定情况下,Oracle支持序列,而MySQL和Derby不支持序列

<> P>当我让Hibernate生成DDL时,我可以选择不同的方言,并且在使用Oracle并使用普通表(ID生成)时使用德比或MySQL时,它会考虑这些不同的能力并生成<代码>排序器< /代码>。p> 现在,我知道我可以通过在
dbms
属性中指定“
oracle
”来约束变更集。但是,如何为其他数据库执行普通表解决方案呢?
dbms
似乎没有“not oracle”属性

其他人是怎么处理的?(我在liquibase页面或论坛上都找不到任何关于它的信息。)

尝试在changset上使用。支持布尔运算

比如说

 <preConditions onFail="CONTINUE">
     <or>
         <dbms type="oracle" />
         <dbms type="mysql" />
     </or>
 </preConditions>

另一种方法是将所有序列放入一个changelog文件中,
将其包含在主变更日志中,然后执行如下操作:

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


谢谢你的帮助,马克。我已经找到了
先决条件
,但这意味着我必须列出所有不支持
序列的数据库。如果liquibase扩展了受支持数据库的列表(或者在将来的版本中有一个支持非序列的数据库确实支持这一点),我将不得不考虑这一点并扩展列表。我希望有一个更少的“不得不重新考虑”的解决方案。哦,也许现在我明白了你所说的布尔运算是受支持的:你可以像这样添加
。是的,这就是我的意思。无论哪种方式,您都必须维护某种列表。支持(或不支持)序列的数据库。真正的跨平台模式并非没有挑战:-)