Comment travailler avec liquibase, un exemple concret
-
18-09-2019 - |
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
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.
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.