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