How to tag a changeset in liquibase to rollback

后端 未结 2 1624
醉酒成梦
醉酒成梦 2020-12-23 14:46

I have configured the maven pluggin for liquibase as specified in maven configuration.
Now created a changeset like :-



        
相关标签:
2条回答
  • 2020-12-23 14:59

    Rollback tags are designed to checkpoint your database's configuration.

    The following commands will roll the database configuration back by 3 changesets and create a tag called "checkpoint":

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

    You can now update the database, and at any stage rollback to that point using the rollback tag:

    mvn liquibase:rollback -Dliquibase.rollbackTag=checkpoint
    

    or alternatively generate the rollback SQL:

    mvn liquibase:rollbackSQL -Dliquibase.rollbackTag=checkpoint
    

    Revised example

    I initially found it difficult to figure out how to configure the liquibase Maven plugin. Just in case it helps here's the example I've used.

    The liquibase update is configured to run automatically, followed by tagging the database at the current Maven revision number.

    <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 is now configured as part of the standard life-cycle so can be run as follows:

    mvn clean compile
    
    0 讨论(0)
  • 2020-12-23 15:18

    I personally prefer to put the tag as part of the changeset files, so if you have to rollback or delete all the records in the DATABASECHANGELOG you won't loose your tagging records.

    <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 讨论(0)
提交回复
热议问题