12

changeSetインデックスを作成する必要があるliquibaseで以下を実行しようとしています。インデックスが存在しない場合は、黙って失敗するはずです。

<changeSet failOnError="false" author="sys" id="1">
    <createIndex unique="true"  indexName="key1" tableName="Table1">
        <column name="name" />
    </createIndex>
</changeSet>

ここまでは順調ですね。問題は、これchangeSetがDATABASECHANGELOGテーブルに記録されないため、liquibaseが実行されるたびに実行されることです。liquibaseのドキュメントによると、たとえば、Nathen Voxlandからのこの回答によると、チェンジセットはDATABASECHANGELOGテーブルで実行済みとしてマークする必要があると思いました。代わりに、それはまったくログに記録されず、前に言ったように、liquibaseが実行されるたびに実行されます(そして再び失敗します)。

私は何かが足りないのですか?

(私はMySQLをDBMSとして使用しています)

4

1 に答える 1

8

Nathen Voxland による回答では、変更セットを実行する前に前提条件を使用してデータベースの状態をチェックするという、より正しいアプローチを推奨します

失敗を無視するのは悪い考えのように思えます....つまり、データベース構成を完全に制御していないということです.. "failOnError" パラメータにより、liquibase は続行できます。実際にエラーが発生したために変更セットが実行されなかったとしたら、ビルドが変更セットを実行済みとして記録するのは悪い考えではないでしょうか?

于 2012-06-06T22:41:16.503 に答える