Como trabalhar com liquibase, um exemplo concreto
-
18-09-2019 - |
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
dizMigration 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
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.
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.