Question

Après le démarrage rapide sur liquibase j'ai créé un changeset (très stupide :))

Code:

<?xml version="1.0" encoding="UTF-8"?>

<databaseChangeLog
  xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.6"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.6
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.6.xsd">

    <changeSet id="1" author="me">
        <createTable tableName="first_table">
            <column name="id" type="int">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="name" type="varchar(50)">
                <constraints nullable="false"/>
            </column>
        </createTable>
        <createTable tableName="new_table">
            <column name="id" type="int">
                <constraints primaryKey="true" nullable="false"/>
            </column>
        </createTable>
    </changeSet>

</databaseChangeLog>

J'ai créé un schéma propre et j'ai lancé la commande migrate.

Liquibase a créé la base de données, avec les tables de support databasechangelog et ..lock.

Maintenant, comment je peux suivre les changements ?? J'ai modifié le changeset ajoutant un nouvel élément createTable mais lorsque je tente la commande « update » liquibase me dit que ce

Migration Failed: Validation Failed:
     1 change sets check sum

donc je ne pense pas avoir compris la façon de travailler avec liquibase.

Quelqu'un peut me pointer vers la bonne direction ??

Merci

Était-ce utile?

La solution

Vous ne devriez jamais modifier une <changeSet> qui a déjà été exécuté. Liquibase calcule pour tous les checksums exécutés et changesets les stocke dans le journal. Il recalculera alors que la somme de contrôle, le comparer à ceux stockés et échouent la prochaine fois que vous exécutez si les checksums diffèrent.

Ce que vous devez faire est au lieu d'ajouter autre <changeSet> et mettre votre nouvel élément createTable en elle.

QuickStart est bon readin', mais il est en effet rapide :-) Vérifiez la pleine manuel, en particulier son ChangeSet section.

Autres conseils

Cette réponse actuellement acceptée est un peu obsolète en fonction des changements dans Liquibase 2.x. Dans la version 2.x, Liquibase sera toujours échouer si la somme de contrôle md5 a changé pour un changeset, mais vous pouvez spécifier le runOnChange attribut si vous voulez être en mesure de le modifier.

De la documentation :

  

runOnChange - Exécute le changement de la première fois qu'il est vu et chaque fois que le jeu de changement a été modifié

Si c'est un changement qui a un changeset essentiellement déjà fait, vous pouvez modifier manuellement la base de données de sorte que son md5 pour ce changeset correspond à la nouvelle. Bon pour les modifications textuelles mineures. Ou vous pouvez supprimer cette ligne de changeset de votre table.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top