2

私はLiquibaseを使い始めたばかりで、さまざまなデータベースの機能を区別するために問題に困惑しました。

複数のデータベース(Oracle、MySQL、Derby-3つ挙げます)をサポートしたいと思います。

すべてが異なる機能を持っています。特定のOracleではサポートされていますがsequences、MySQLとDerbyではサポートされていません。

hibernateにDDLを生成させると、さまざまな方言を選択できます。これらのさまざまな機能を考慮して、SequencerOracleを使用する場合はを生成し、DerbyまたはMySQLを使用する場合はプレーンテーブル(ID生成用)を使用します。

これで、属性に' oracle'を指定することで、チェンジセットを制約できることがわかりました。dbmsしかし、他のデータベースのプレーンテーブルソリューションをどのように実行できますか?の「notoracle」属性はないようです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別のアプローチは、すべてのシーケンスをメインの変更ログにある変更ログファイルに入れてから、次のようにすることです。

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

そのチェンジセットは、リストされているDBMSに対してのみ実行されます。

于 2015-04-08T11:07:21.210 に答える