transaction tag database maven-plugin liquibase

database - tag - liquibase sql transaction



Cómo etiquetar un conjunto de cambios en liquibase para revertir (2)

He configurado el complemento de maven para liquibase como se especifica en la configuración de maven .
Ahora creó un conjunto de cambios como:

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

Creé el sql para actualizar la base de datos utilizando la línea de comandos: - mvn liquibase: updateSQL

Pero solo quiero saber cómo revertir usando un parámetro "rollbackTag". es decir, si ejecuta el comando " mvn liquibase: rollbackSQL ", cuál debería ser el valor del parámetro "rollbackTag".

¿Y es posible revertir usando el id de conjunto de cambios?


Las etiquetas Rollback están diseñadas para controlar la configuración de su base de datos.

Los siguientes comandos revertirán la configuración de la base de datos en 3 conjuntos de cambios y crearán una etiqueta llamada "punto de control":

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

Ahora puede actualizar la base de datos y, en cualquier etapa, revertir a ese punto usando la etiqueta rollback:

mvn liquibase:rollback -Dliquibase.rollbackTag=checkpoint

o alternativamente generar el rollback de SQL:

mvn liquibase:rollbackSQL -Dliquibase.rollbackTag=checkpoint

Ejemplo revisado

Inicialmente me resultó difícil descubrir cómo configurar el complemento Liquibase Maven. Por si acaso ayuda, aquí está el ejemplo que he usado.

La actualización de liquibase está configurada para ejecutarse automáticamente, y luego se etiqueta la base de datos con el número de revisión actual de 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 ahora está configurado como parte del ciclo de vida estándar, por lo que se puede ejecutar de la siguiente manera:

mvn clean compile


Personalmente, prefiero colocar la etiqueta como parte de los archivos del conjunto de cambios, así que si tiene que restaurar o eliminar todos los registros en DATABASECHANGELOG , no perderá sus registros de etiquetado.

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