Comment étiqueter un jeu de modifications dans liquibase en rollback

j'ai configuré le pluggin maven pour liquibase comme spécifié dans Maven configuration.

Maintenant créé un jeu de modifications comme: -

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

créé le sql pour mettre à jour DB en utilisant la ligne de commande :- mvn liquibase: updateSQL

Mais je veux juste savoir comment faire pour la restauration à l'aide d'un "rollbackTag" paramètre. c'est à dire Si l'exécution de la commande " mvn liquibase: rollbackSQL", quelle devrait être la valeur de " rollbackTag" paramètre.

et est-il possible de revenir en arrière en utilisant le changeset id ?

23
demandé sur Manu 2012-06-21 09:26:20

2 réponses

les balises de retour sont conçues pour contrôler la configuration de votre base de données.

les commandes suivantes vont retourner la configuration de la base de données par 3 changesets et créer une balise appelée "checkpoint":

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

vous pouvez maintenant mettre à jour la base de données, et à n'importe quelle étape de retour à ce point en utilisant la balise de retour:

mvn liquibase:rollback -Dliquibase.rollbackTag=checkpoint

ou alternativement générer le SQL rollback:

mvn liquibase:rollbackSQL -Dliquibase.rollbackTag=checkpoint

exemple révisé

j'ai d'abord trouvé difficile de comprendre comment configurer le plugin liquibase Maven. Juste au cas où il aide voici l'exemple que j'ai utilisé.

la mise à jour de liquibase est configurée pour être exécutée automatiquement, suivie du marquage de la base de données au numéro de révision Maven actuel.

<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 est maintenant configuré dans le cadre du cycle de vie standard et peut donc être exécuté comme suit:

mvn clean compile
37
répondu Mark O'Connor 2012-06-24 12:07:42

personnellement, je préfère mettre l'étiquette dans les fichiers changeset, donc si vous devez faire reculer ou supprimer tous les enregistrements dans le DATABASECHANGELOG Vous ne perdrez pas vos enregistrements.

<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>
13
répondu kothvandir 2015-01-14 09:48:03