Gerador de Liquibase changelog a partir de tabela
Gera um changelog Liquibase (YAML) com changeSet createTable — a partir do nome da tabela.
—
Changelogs do Liquibase: migrations abstratas e portáveis
O Liquibase é a ferramenta de migration de banco criada por Nathan Voxland em 2006, hoje mantida pela Liquibase, Inc. Enquanto o Flyway rastreia arquivos SQL crus, o Liquibase modela cada mudança como um changeset abstrato em XML, YAML, JSON ou SQL. O runner traduz a descrição abstrata em SQL específico do dialeto na hora da execução — é por isso que o mesmo changelog funciona contra PostgreSQL, MySQL, Oracle, SQL Server, Snowflake e mais de 50 outros engines.
É distribuído como CLI open-source mais a camada paga Liquibase Pro (relatórios avançados, pipelines Liquibase Flow) e o Liquibase Hub (descontinuado em 2023). Integra com Maven, Gradle, Spring Boot (spring-boot-starter-liquibase), Docker, Jenkins, GitHub Actions e a maioria dos sistemas de CI.
Anatomia de um changeset
Um changelog é uma lista de elementos <changeSet>, cada um identificado pelo par id + author. O formato XML é o original; o YAML é mais legível e cada vez mais preferido:
<changeSet id="1" author="alice">
<createTable tableName="users">
<column name="id" type="uuid">
<constraints primaryKey="true"/>
</column>
<column name="email" type="varchar(255)">
<constraints unique="true" nullable="false"/>
</column>
</createTable>
</changeSet>
O Liquibase converte type="uuid" na coluna correta para o dialeto (UUID no PostgreSQL, CHAR(36) no MySQL, UNIQUEIDENTIFIER no SQL Server). Ainda é possível descer para SQL cru com <sql> ou <sqlFile path="..."/> quando faltar abstração.
Rollback, contexts, labels e preconditions
- Rollback — todo changeset pode declarar o inverso via
<rollback>. Para operações conhecidas (createTable,addColumn), o Liquibase gera o inverso automaticamente. - Contexts — marque um changeset com
context="dev,test"para aplicá-lo apenas em ambientes selecionados. - Labels — semelhante a contexts mas combinado com expressões booleanas para seleção mais rica.
- Preconditions — condicionam a execução a um check (
<columnExists>,<sqlCheck>) para pular ou abortar quando o banco está em um estado inesperado.
O Liquibase grava as mudanças aplicadas na tabela DATABASECHANGELOG (e bloqueia o schema com DATABASECHANGELOGLOCK durante a execução para impedir migrations concorrentes).
Liquibase vs Flyway
- Abstração — Liquibase abstrai o dialeto; Flyway é SQL cru. Escolha Liquibase para portabilidade multi-banco real.
- Rollback — first-class no Liquibase open-source; só na versão comercial do Flyway.
- Verbosidade — Flyway é mais enxuto; YAML/XML do Liquibase carrega metadados mesmo em mudanças triviais.
- Tooling — ambos têm integrações fortes com Spring Boot, Maven e CI. Ambos podem ser executados a partir de um container Docker.
Alternativas emergentes a partir de 2023 incluem Atlas, Bytebase e abordagens schema-as-code que comparam um arquivo de estado desejado com o banco vivo — filosofia diferente, vale avaliar em projetos novos.
FAQ
Usar XML ou YAML? YAML pela legibilidade e menor ruído. XML ainda aparece em projetos legados e na documentação. JSON é raramente escolhido.
Posso misturar SQL cru em um changelog YAML? Sim — use o change type sql ou sqlFile apontando para um arquivo separado. Misture à vontade.
Liquibase ou Flyway — qual escolher? Liquibase se você mira em vários bancos ou precisa de rollback nativo. Flyway se o time prefere SQL cru e fica em um único engine.
O que acontece se eu editar um changeset já commitado? O Liquibase recalcula o MD5 e se recusa a rodar com erro de validation failed. Adicione um novo changeset com um novo id em vez de editar.
Spring Boot integra nativamente? Sim — adicione spring-boot-starter-liquibase, coloque o changelog em src/main/resources/db/changelog/ e as migrations rodam no startup.
Ferramentas Relacionadas
Gerador de migration Knex a partir de tabela
Gere uma migration do Knex.js (createTable e dropTable) a partir do nome de uma tabela. Acelere a criação de migrações de banco de dados no seu projeto Node.js.
Gerador de migration Flyway a partir de tabela
Gere um arquivo de migration do Flyway (V1__create_table.sql) com CREATE TABLE a partir do nome de uma tabela. Versione o schema do seu banco em projetos Java.
Gerador de Sequelize model a partir de tabela
Gere um model do Sequelize (JS) com colunas e timestamps a partir do nome de uma tabela. Acelere a modelagem do banco de dados no seu projeto Node.js.