35

liquibaseのクイックスタートに続いて、チェンジセットを作成しました(非常にばかげています:))

コード:

<?xml version="1.0" encoding="UTF-8"?>

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

    <changeSet id="1" author="me">
        <createTable tableName="first_table">
            <column name="id" type="int">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="name" type="varchar(50)">
                <constraints nullable="false"/>
            </column>
        </createTable>
        <createTable tableName="new_table">
            <column name="id" type="int">
                <constraints primaryKey="true" nullable="false"/>
            </column>
        </createTable>
    </changeSet>

</databaseChangeLog>

クリーンなスキーマを作成し、migrateコマンドを起動しました。

Liquibaseは、サポートテーブルdatabasechangelogと..lockを使用してデータベースを作成しました。

変更を追跡するにはどうすればよいですか?新しいcreateTable要素を追加してチェンジセットを変更しましたが、コマンド「update」を試してみると、liquibaseはこれを教えてくれます

Migration Failed: Validation Failed:
     1 change sets check sum

だから私はliquibaseを使う方法を理解していないと思います。

誰かが私を正しい方向に向けるかもしれませんか?

ありがとう

4

3 に答える 3

39

<changeSet>すでに実行されているa を決して変更しないでください。Liquibase は、実行されたすべての変更セットのチェックサムを計算し、ログに保存します。次に、そのチェックサムを再計算し、保存されているものと比較し、チェックサムが異なる場合は次回実行時に失敗します。

代わりに、別の <changeSet>要素を追加して、その中に新しい createTable 要素を配置する 必要があります。

QuickStart はよく読んでいますが、確かに速いです :-) 完全なマニュアル、特にそのChangeSetセクションを確認してください。

于 2009-07-19T02:53:15.023 に答える
27

この現在受け入れられている回答は、Liquibase 2.x の変更に基づいて少し古くなっています。2.x バージョンでは、変更セットの md5 チェックサムが変更された場合、Liquibase は引き続き失敗しますが、それを変更できるようにする場合は、 runOnChange属性を指定できます。

ドキュメントから:

runOnChange - 変更が最初に検出されたとき、および変更セットが変更されるたびに変更を実行します。

于 2011-11-07T17:57:40.523 に答える