web-dev-qa-db-fra.com

Comment marquer un ensemble de modifications dans la base de données pour l'annuler

J'ai configuré le pluggin maven pour la base de données comme spécifié dans configuration maven .
Maintenant créé un ensemble de modifications comme: -

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

Création du SQL pour mettre à jour DB en utilisant la ligne de commande: - mvn liquibase: updateSQL

Mais je veux juste savoir comment restaurer en utilisant un paramètre "rollbackTag". Par exemple, si vous exécutez la commande " mvn liquibase: rollbackSQL ", quelle devrait être la valeur du paramètre "rollbackTag".

Et est-il possible de revenir en arrière en utilisant l'id de l'ensemble de modifications?

26
Manu

Les balises de restauration sont conçues pour vérifier la configuration de votre base de données.

Les commandes suivantes restaureront la configuration de la base de données par 3 ensembles de modifications et créeront une balise appelée "point de contrôle":

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

Vous pouvez maintenant mettre à jour la base de données et, à tout moment, revenir à ce stade à l'aide de la balise de retour en arrière:

mvn liquibase:rollback -Dliquibase.rollbackTag=checkpoint

ou bien générer le rollback SQL:

mvn liquibase:rollbackSQL -Dliquibase.rollbackTag=checkpoint

Exemple révisé

Au début, j'ai eu du mal à comprendre comment configurer le plugin Liquavase Maven. Juste au cas où cela aiderait, voici l'exemple que j'ai utilisé.

La mise à jour de la base de données est configurée pour s'exécuter automatiquement, suivie du balisage de la base de données avec le 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
43
Mark O'Connor

Personnellement, je préfère placer la balise dans les fichiers de modifications, donc si vous devez annuler ou supprimer tous les enregistrements dans DATABASECHANGELOG, vous ne perdrez pas vos enregistrements de balisage.

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