2012-06-21 14 views
21

maven configurationで指定されているliquibase用のmavenプラグインを設定しました。liquibaseでチェンジセットをタグ付けしてロールバックする方法

updateSQLしかし、単に「rollbackTagを使用してロールバックする方法を知りたい: MVNのLiquiBaseを - :

コマンドラインを使用してDBを更新するためにSQLを作成し
<changeSet id="changeRollback" author="nvoxland"> 
    <createTable tableName="changeRollback1"> 
    <column name="id" type="int"/> 
    </createTable> 
    <rollback> 
    <dropTable tableName="changeRollback1"/> 
    </rollback> 
</changeSet> 

- :
は、今のようなチェンジセットを作成しましたパラメータ。 つまり、コマンド「mvn liquibase:rollbackSQL」を実行する場合、「rollbackTag」パラメータの値はどのようにする必要がありますか。

変更セットIDを使用してロールバックすることはできますか?

+4

あなたは –

答えて

35

ロールバックタグは、データベースの設定をチェックポイントするように設計されています。

次のコマンドは、3つのチェンジによってバックデータベース構成をロールし、「チェックポイント」と呼ばれるタグを作成します。

mvn liquibase:rollback -Dliquibase.rollbackCount=3 
mvn liquibase:tag -Dliquibase.tag=checkpoint 

あなたが今、データベースを更新し、ロールバックを使用して、その時点までの任意の段階のロールバックですることができますタグ:

mvn liquibase:rollbackSQL -Dliquibase.rollbackTag=checkpoint 

mvn liquibase:rollback -Dliquibase.rollbackTag=checkpoint 

または代替的にロールバックSQLを生成します

改訂例

liquibase Mavenプラグインの設定方法がわかりにくいことがわかりました。その場合は、私が使用した例がここに役立ちます。

liquibaseアップデートは自動的に実行され、その後に現在のMavenリビジョン番号でデータベースにタグ付けされるように設定されています。

LiquiBaseをは現在、標準的なライフサイクルの一部として構成されて
<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.myspotontheweb.db</groupId> 
    <artifactId>liquibase-demo</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <properties> 
     <!-- Liquibase settings --> 
     <liquibase.url>jdbc:h2:target/db1/liquibaseTest;AUTO_SERVER=TRUE</liquibase.url> 
     <liquibase.driver>org.h2.Driver</liquibase.driver> 
     <liquibase.username>user</liquibase.username> 
     <liquibase.password>pass</liquibase.password> 
     <liquibase.changeLogFile>com/myspotontheweb/db/changelog/db-changelog-master.xml</liquibase.changeLogFile> 
     <liquibase.promptOnNonLocalDatabase>false</liquibase.promptOnNonLocalDatabase> 
    </properties> 
    <dependencies> 
     <dependency> 
      <groupId>com.h2database</groupId> 
      <artifactId>h2</artifactId> 
      <version>1.3.162</version> 
     </dependency> 
    </dependencies> 
    <profiles> 
     <profile> 
      <id>dbupdate</id> 
      <activation> 
       <activeByDefault>true</activeByDefault> 
      </activation> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.liquibase</groupId> 
         <artifactId>liquibase-maven-plugin</artifactId> 
         <version>2.0.2</version> 
         <executions> 
          <execution> 
           <phase>process-resources</phase> 
           <configuration> 
            <tag>${project.version}</tag> 
           </configuration> 
           <goals> 
            <goal>update</goal> 
            <goal>tag</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
    </profiles> 
</project> 

次のように実行することができます。

mvn clean compile 
+0

どうもありがとう[マーク・オコナー](http://stackoverflow.com/users/256618/mark-oconnor):-)ナトンvoxlandじゃありません。上記の構成では、「更新」目標とともに「タグ」目標を追加することが可能です。完全なmvnコマンドを実行しても実行できますか?ありがとうございました – Manu

+0

@gfghj例が要求どおりに更新されました –

+0

rollbackSQLを作成しようとしているときにエラーが表示されました: - [INFO] Liquibaseを設定または実行中にエラーが発生しました:liquibase.exception.RollbackImpossibleException:liquibase.change.core.UpdateDataChange – Manu

12

ますので、もし、私が個人的に、チェンジファイルの一部としてタグを置くことを好みますDATABASECHANGELOGのすべてのレコードをロールバックまたは削除する必要があります。タグ付け記録が失われることはありません。

<databaseChangeLog> 
    <changeSet id="001_create_tables" .../> 
    <changeSet id="002_alter_tables" .../> 
    <changeSet id="003_load_user_data" .../> 

    <!-- Also include the tagging itself as a changeSet... --> 
    <changeSet author="userId" id="tag_version_0_1_0"> 
     <tagDatabase tag="version_0.1.0" /> 
    </changeSet> 
    <!-- version 0.1.0 ends here --> 

</databaseChangeLog> 
+0

ありがとう。私は目標を作成しましたロールバックSQLと設定では、タグ version_0.1.0 を追加しました。しかし、目標ロールバックSQLを実行すると、ロールバックスクリプトが生成されません。しかし、 2を使用してロールバックカウントを指定すると、最後の2つのチェンジセットのロールバックスクリプトが作成されます。なぜロールバックスクリプトが生成されなかったのでしょうか? – Manu

+0

liquibaseコマンドラインからrollbackSQLコマンドを直接起動しようとしましたか? DBスキーマの現在の状態とタグで参照されている状態が異なることを確認するだけで、コマンドはある種のSQLを返さなければなりません。 – kothvandir

+0

いいえ、mavenプラグインを使用して実行しました。しかし、updateSQLの目標を実行すると、生成されたSQLにタグが追加されていることがわかりました。私はタグが異なっていないと確信しています。 – Manu

関連する問題