web-dev-qa-db-ja.com

liquibaseのチェンジセットにロールバックのタグを付ける方法

maven configuration で指定されているliquibaseのmavenプラグインを設定しました。
次のような変更セットを作成しました:-

<changeSet id="changeRollback" author="nvoxland">
  <createTable tableName="changeRollback1">
     <column name="id" type="int"/>
  </createTable>
  <rollback>
     <dropTable tableName="changeRollback1"/>
  </rollback>
</changeSet>

コマンドラインを使用してDBを更新するsqlを作成しました:-mvn liquibase:updateSQL

ただし、「rollbackTag」パラメーターを使用してロールバックする方法を知りたいだけです。すなわち、コマンド「mvn liquibase:rollbackSQL」を実行する場合、「rollbackTag」パラメータの値はどうあるべきか。

そして、チェンジセットIDを使用してロールバックすることは可能ですか?

26
Manu

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

次のコマンドは、3つの変更セットによってデータベース構成をロールバックし、「checkpoint」というタグを作成します。

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

これで、データベースを更新でき、任意の段階でrollbackタグを使用してそのポイントにロールバックできます。

mvn liquibase:rollback -Dliquibase.rollbackTag=checkpoint

または、ロールバックSQLを生成します。

mvn liquibase:rollbackSQL -Dliquibase.rollbackTag=checkpoint

改訂された例

最初は、liquibase Mavenプラグインの構成方法を理解するのが難しいと感じました。念のため、ここで使用した例を紹介します。

Liquibaseの更新は自動的に実行されるように構成され、その後、現在のMavenリビジョン番号でデータベースにタグが付けられます。

<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>

Liquibaseは標準のライフサイクルの一部として構成されているため、次のように実行できます。

mvn clean compile
43
Mark O'Connor