Pergunta

Após o início rápido em liquibase Eu criei um conjunto de alterações (muito burro :))

Código:

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

Eu criei um esquema limpo e eu lançamos o comando Migrar.

Liquibase criado o banco de dados, com as tabelas de apoio databasechangelog e ..lock.

Agora, como posso controlar as alterações ?? i tenha modificado o conjunto de alterações adicionando um novo elemento createTable mas quando eu tento o "update" de comando liquibase me este

diz
Migration Failed: Validation Failed:
     1 change sets check sum

então eu não acho que tenha entendido a maneira de trabalhar com liquibase.

Alguém pode me apontar para a direção certa ??

Graças

Foi útil?

Solução

Você nunca deve modificar um <changeSet> que já foi executado. Liquibase calcula somas de verificação para todos os changesets executados e os armazena no log. Será então recalcular que checksum, compará-lo com os armazenados e falhar na próxima vez que você executá-lo, se as somas de verificação diferem.

O que você precisa fazer é em vez de adicionar outra <changeSet> e colocar o seu novo elemento createTable nele.

QuickStart é bom readin' mas é realmente rápida :-) Confira a plena manual do , particularmente a sua ChangeSet seção.

Outras dicas

Esta resposta atualmente aceita é ligeiramente fora de data com base em mudanças na Liquibase 2.x. Na versão 2.x, Liquibase ainda falhará se o MD5 checksum mudou para um conjunto de alterações, mas você pode especificar o runOnChange atributo se você quer ser capaz modificá-lo.

A partir da documentação :

runOnChange - Executa a mudança a primeira vez que é visto e cada vez que o conjunto de mudanças foi alterado

Se é uma mudança para um conjunto de alterações que, basicamente, já foi feito, você pode modificar manualmente o banco de dados de modo que sua md5 para que changeset corresponde ao novo. Bom para pequenas alterações textuais. Ou você pode excluir essa linha de alterações da sua tabela.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top