Liquibase 当使用例如序列时,如何区分数据库
我刚刚开始使用这个问题,并对其进行了深入研究,以区分不同数据库的功能 我们希望支持多个数据库(Oracle、MySQL、Derby等等) 它们都有不同的能力。在特定情况下,Oracle支持序列,而MySQL和Derby不支持序列 <> P>当我让Hibernate生成DDL时,我可以选择不同的方言,并且在使用Oracle并使用普通表(ID生成)时使用德比或MySQL时,它会考虑这些不同的能力并生成<代码>排序器< /代码>。p> 现在,我知道我可以通过在Liquibase 当使用例如序列时,如何区分数据库,liquibase,Liquibase,我刚刚开始使用这个问题,并对其进行了深入研究,以区分不同数据库的功能 我们希望支持多个数据库(Oracle、MySQL、Derby等等) 它们都有不同的能力。在特定情况下,Oracle支持序列,而MySQL和Derby不支持序列 P>当我让Hibernate生成DDL时,我可以选择不同的方言,并且在使用Oracle并使用普通表(ID生成)时使用德比或MySQL时,它会考虑这些不同的能力并生成排序器< /代码>。p> 现在,我知道我可以通过在dbms属性中指定“oracle”来约束变更集。但是,
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扩展了受支持数据库的列表(或者在将来的版本中有一个支持非序列的数据库确实支持这一点),我将不得不考虑这一点并扩展列表。我希望有一个更少的“不得不重新考虑”的解决方案。哦,也许现在我明白了你所说的布尔运算是受支持的:你可以像这样添加
:
。是的,这就是我的意思。无论哪种方式,您都必须维护某种列表。支持(或不支持)序列的数据库。真正的跨平台模式并非没有挑战:-)