0

私たちは liquibase 1.9.5 を使用していますが、これはそのバージョンの既知のバグではありません。簡単に言えば、1.0 リリースの liquibase は正常に実行されましたが、追加のチェンジセットを含む 1.1 リリースを実行しようとすると、1.0 チェンジセットの md5sums についてエラーが発生しました。

DATABASECHANGELOG の md5sum 列を無効にすることで短期的には回避しましたが、何か間違ったことをしているだけなのだろうかと思っています。

Liquibase は次のように構成されています: すべての展開で実行する 1 つのマスター .xml ファイル。これには、ソフトウェアのバージョンごとに個別のファイルのコマンドが含まれています (正しい順序で)。

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.9"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.9 http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.9.xsd">
    <include file="v1_0.xml" />
    <include file="v1_1.xml" />
</databaseChangeLog>

したがって、最初のリリースには v1_0.xml のみが含まれており、プッシュしたばかりのリリースには上記の内容が含まれていました。

v1_0.xml ファイルはリリース間で変更されていませんが、新しいリリースの liquibase を呼び出そうとすると、次のエラーが発生しました。

SEVERE: Validation Failed:
     1 change sets check sum
      v1_0.xml::foo_schema::bdeacon::(MD5Sum: ff63b8d1739e6cf1dcaed6a0ef585257)

問題の変更セット:

<changeSet author="bdeacon" id="foo_schema">
    <preConditions onFail="MARK_RAN">
        <not><tableExists tableName="some_table"/></not>
    </preConditions>
    <sqlFile path="database/initial/foo-schema.sql" />
</changeSet>

参照されている foo-schema.sql ファイルも、リリース間で変更されていません。(これは、データベース スキーマ全体の最初の作成を行います。これには、前提条件で言及されている「some_table」が含まれます。)

liquibase が、リリース間のすべての changeSet に手動で validCheckSum 要素を追加することを期待していないことを願っています...

4

2 に答える 2

1

changeSet または sql ファイルの内容が変更されない限り、validCheckSum を追加する必要はありません。

SVN のバージョン番号や空白/行末など、foo-schema.sql で変更されている可能性があるものはありますか?

于 2011-08-09T18:03:49.933 に答える
0

「runOnChange」changeSet 属性を true に設定できます。その場合、変更セットによって参照される SQL ファイルが変更されるたびに、その変更セットが再度実行され、そのチェックサムが更新されます。liquibase doc のChangeSet Check Sumsセクションを参照してください。パッケージ/プロシージャ/トリガーコードが「CREATE OR REPLACE」のようなステートメントを使用している場合に特に役立ちます。この場合、「..already exists」エラーを回避するために、SQL ファイルへの呼び出しの前に drop ステートメントを使用する必要はありません。

于 2013-07-24T20:20:47.847 に答える