2012-06-21 16 views
21

He configurado el conector auxiliar para liquibase como se especifica en maven configuration.
Ahora ha creado un conjunto de cambios como: -Cómo etiquetar un conjunto de cambios en liquibase para retrotraer

<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 base de datos utilizando la línea de comandos: - mvn Liquibase: UpdateSQL

sino que sólo quiere saber cómo retrotracción utilizando un "rollbackTag "parámetro. es decir, si ejecuta el comando "mvn liquibase: rollbackSQL", cuál debería ser el valor del parámetro "rollbackTag".

¿Y es posible deshacer con la ID del conjunto de cambios?

+4

Usted no es Nathon VOXLAND :-) –

Respuesta

35

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

Los siguientes comandos rodar la configuración de base de datos back por 3 conjuntos de cambios y crear 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 de reversión a ese punto mediante la reversión etiqueta:

mvn liquibase:rollback -Dliquibase.rollbackTag=checkpoint 

o alternativamente generar el SQL rollback:

mvn liquibase:rollbackSQL -Dliquibase.rollbackTag=checkpoint 

Ejemplo revisado

Inicialmente me resultó difícil encontrar la manera de configurar el complemento de liquibase Maven. Por si acaso esto ayuda, este es el ejemplo que he usado.

La actualización de liquibase está configurada para ejecutarse automáticamente, seguido de etiquetar la base de datos con el número de revisión de Maven actual.

<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á configurado como parte del ciclo de vida estándar por lo que puede ser ejecutado como sigue:

mvn clean compile 
+0

Muchas gracias [Mark O'Connor] (http://stackoverflow.com/users/256618/mark-oconnor). En la configuración anterior, es posible agregar el objetivo de "etiqueta" junto con el objetivo de "actualización". ¿Podría dar el comando completo mvn para ejecutarlo también? Gracias de antemano – Manu

+0

@gfghj Ejemplo actualizado como solicitado –

+0

Al intentar crear rollbackSQL, recibí el error: - [INFO] Error al configurar o ejecutar Liquibase: liquibase.exception.RollbackImpossibleException: No inverso a liquibase.change.core.UpdateDataChange creado – Manu

12

yo personalmente prefiero poner la etiqueta como parte de los archivos del conjunto de cambios, por lo que si tiene que volver atrás o eliminar todos los registros en el 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> 
+0

Muchas gracias. He creado el objetivo maven rollbackSQL y en la configuración se ha agregado la etiqueta version_0.1.0 . Pero cuando ejecuto el objetivo rollbackSQL, no genera el script de reversión. Pero si especifico el conteo de reversión usando 2 los scripts de reversión se crean para los dos últimos conjuntos de cambios. ¿Alguna idea de por qué no se generó el script de reversión? – Manu

+0

¿Intentó ejecutar el comando rollbackSQL directamente desde la línea de comandos de liquibase? solo para estar seguro de que el estado actual de su esquema de base de datos y el estado al que se refiere su etiqueta son diferentes y, por lo tanto, el comando debe generar algún SQL. – kothvandir

+0

No. Lo ejecuté usando el complemento maven. Pero pude ver que la etiqueta se agregó en el SQL generado cuando ejecuté el objetivo updateSQL y actualicé el DB con él. Estoy seguro de que las etiquetas no son diferentes. – Manu

Cuestiones relacionadas