Pular para o conteúdo principal

Versionamento de Banco Dados com Flyway

Olá pessoal, hoje iremos analisar e aprender como realizar o versionamento e gerenciamento das bases de dados relacionais utilizando o framework Flyway.

Versionamento de Banco Dados

Ao trabalhar com desenvolvimento de sistemas é comum realizarmos o versionamento, isso porque uma aplicação pode necessitar de correções, novas funcionalidades e evoluções, onde para garantir a compatibilidade e cuidar do seu ciclo de vida, geramos versões onde é especificado quais itens estão presentes em cada release.

Vamos imaginar seguinte cenário:
  • Sistema ERP
    • 1.0.0: Entrega dos módulos Financeiro e RH;
    • 1.1.0: Entrega do módulo Contas a Receber.
Perceba que a ideia é controlar o que cada versão possui de diferente, e para controlar essas mudanças no lado da aplicação existem várias técnicas e ferramentas, mas e para controlar as mudanças no lado do Banco de dados ? 

Para isso podemos utilizar ferramentas de versionamento que ajudam a realizar este controle, a ferramenta que iremos utilizar é o Flyway.

Conhecendo o Flyway

O Flyway é um framework que permite o versionamento e gerenciamento do Banco de dados, com ele podemos controlar a evolução dos elementos que compõem uma determinada base de dados, sendo eles Tabelas, Sequences, Views, entre outros.

Site oficial: https://flywaydb.org/

Podemos utilizar o Flyway para manipular diferentes sistemas de Banco de dados relacionais, isso é possível porque ele é desenvolvido baseado na API JDBC onde basta especificar o Driver do banco e realizar as migrações.

O Flyway pode ser utilizado através de linha de comando, ou utilizando ferramentas como Maven, Gradle, Ant, SBT, entre outras.

Utilizando Flyway através da Linha de Comando

Download

Para começar, vamos realizar o download do Flyway https://flywaydb.org/download/, a versão corrente é a 5.0.7

Descompactação

Após realizar o download para o S.O desejado, basta descompactar e teremos a seguinte estrutura:

Estrutura do Flyway após descompactação.

Configurando flyway.conf

O próximo passo é a configuração da conexão entre o Flyway e a base de dados, para este exemplo tenho uma base de dados chamada erp criada no PostgreSQL:

Base de dados chamada ERP no PostgreSQL.

Para configurar temos de editar o arquivo localizado em conf/flyway.conf,  nele adicionamos as configurações para realizar a migração, informações como url de acesso, usuário, senha, entre outras.

As partes principais que devemos configurar são:
  • flyway.url
    • Aqui colocamos os dados de conexão baseados na API JDBC, no caso usamos PostgreSQL, então ficaria: jdbc:postgresql://<host>:<port>/<database>
  • flyway.driver
    • Nesta tag adicionamos o Driver de conexão, no caso do PostgreSQL seria: org.postgresql.Driver
  • flyway.user
    • Usuário para se conectar a sua base de dados;
  • flyway.password
    • Senha de acesso a base de dados.
Não esqueça de remover o # da frente das tags mencionadas acima.

Um item muito importante, é que devemos adicionar o jar do Driver do banco de dados utilizado dentro do diretório jars, no caso adicionamos o jar do PostgreSQL, caso não saiba onde efetuar o download acesse https://mvnrepository.com/ e faça uma pesquisa pelo nome do seu banco de dados.

Criando os Scripts

Os scripts são criados utilizando a linguagem SQL ou através de uma API Java, neste exemplo utilizaremos SQL, o Flyway segue uma convenção para o nome dos Scripts, que é V{numero da versão}__<nome_do_script>.sql, estes scripts devem ser adicionados dentro do diretório sql.

Nosso primeiro script de migração será V1.0.0__criacao_estrutura_inicial.sql, e terá o seguinte conteúdo:

create table usuario(
 id serial primary key,
 nome varchar(50) not null,
 login varchar(50) not null,
 senha varchar(50) not null
);

create table produto(
 id serial primary key,
 titulo varchar(50) not null,
 valor numeric(10, 2) not null
);

Agora através da linha de comando e estando dentro do diretório do Flyway, devemos executar o seguinte comando: flyway migrate, o resultado será o abaixo:

Resultado da execução do primeiro script.

Estrutura criada na base de dados ERP.

Após a execução o Flyway realizou a criação de uma tabela adicional, chamada flyway_schema_history, esta tabela o framework utiliza para gerenciar o histórico dos Scripts executados.

Agora vamos incrementar nosso banco de dados realizando a criação de uma nova tabela, para isso iremos criar o script V1.1.0__criando_a_estrutura_pedidos.sql, com o seguinte conteúdo:

create table pedido(
 id serial primary key,
 data timestamp not null
);

create table pedido_itens(
 pedido_id integer references pedido(id),
 produto_id integer references produto(id)
);

Agora basta executar novamente o comando flyway migrate, após realizar todas as migrações vamos analisar a estrutura da tabela flyway_schema_history:


Resultado na tabela de histórico de migrações.

Após todo esse processo temos o banco de dados com versionamento, mantendo todo o histórico de evoluções facilitando o gerenciamento das aplicações.

Até a próxima.

Referências

Comentários

  1. Sabe dizer se é possível atualizar vários bancos de dados de uma só vez com o flyway?

    ResponderExcluir
    Respostas
    1. Fala Cassiano blz, é possível sim, por exemplo com Gradle você pode criar duas FlywayMigrateTask e executar o script, ou por exemplo no Spring Boot você pode criar duas configurações no seu .properties/.yml e criar uma classe @Configuration executando flyway.migrate() em cada configuração que você precisa.

      Excluir
    2. Obrigado por responder Caio, mas por exemplo, eu uso o flyway via CMD mesmo, percebi que para rodar preciso apenas apontar o banco que quero no arquivo flyway.conf e rodar flyway migrate, não tem como eu informar nesse arquivo, para pegar vários bancos e rodar o mesmo script SQL?

      Excluir

Postar um comentário

Postagens mais visitadas do Blog