Domanda

A seguito della QuickStart su liquibase ho creato un insieme di modifiche (molto stupido :))

Codice:

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

Ho creato uno schema pulito e ho lanciato il comando migrate.

Liquibase creato il database, le tabelle di supporto databasechangelog e ..lock.

Ora come faccio a tenere traccia delle modifiche ?? Ho modificato l'insieme di modifiche l'aggiunta di un nuovo elemento CreateTable ma quando provo il "aggiornamento" dei comandi liquibase mi dice che questo

Migration Failed: Validation Failed:
     1 change sets check sum

in modo che io non credo di aver capito il modo di lavorare con liquibase.

Qualcuno mi può puntare nella giusta direzione ??

Grazie

È stato utile?

Soluzione

Non si dovrebbe mai modificare una <changeSet> che è stato già eseguito. Liquibase calcola checksum per tutti i gruppi di modifiche eseguite e li memorizza nel registro. Sarà quindi ricalcolare che checksum, confrontarlo con quelli memorizzati e non riuscire la prossima volta che si esegue se i risultati sono diversi.

Quello che dovete fare, invece è quello di aggiungere altro <changeSet> e mettere il nuovo elemento CreateTable in esso.

QuickStart è buona Readin' ma è davvero veloce :-) Controlla la piena manuale , in particolare la sua changeset sezione.

Altri suggerimenti

Questa risposta attualmente accettata è sempre aggiornati in base alle modifiche in Liquibase 2.x. Nella versione 2.x, Liquibase non riuscirà se il checksum MD5 è cambiato per un changeset, ma è possibile specificare il runOnChange attributo se si vuole essere in grado modificarlo.

Dalla documentazione :

  

runOnChange - Esegue il cambiamento la prima volta che si è visto e ogni volta il set di cambio è stato modificato

Se è una modifica a un insieme di modifiche che in fondo è già stato fatto, è possibile modificare manualmente il database in modo che il suo MD5 per quel changeset corrisponde al nuovo. Buon per le modifiche testuali minori. Oppure si può eliminare la riga di modifiche dal vostro tavolo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top