Executando verificação de segurança...
6

Como fazer um versionamento do banco de dados?

Pessoal, estou com um desafio aqui e gostaria da colaboração de vocês com sugestões :)

Nós temos um software aqui, controlamos as mudanças no banco através de um script que roda as migrações no servidor.

Porém, recentemente, estamos com muitos desafios para manter as versões do banco. Por exemplo:

  1. Versão Local Dev 1 na Branch X
  2. Versão Local Dev 2 na Branch Y
  3. Versão do ambiente de testes
  4. Versão do ambiente de produção

Estamos com alguns problemas e são eles:

  1. Toda vez que um novo colega de trabalho entra pro time, é um parto fazer o build do ambiente de desenvolvimento. Pois montar o banco no local dele é muito complicado, os migrations estão com inconsistências e fica com vários conflitos.
  2. Suponhamos que estou na Branch Y, mas vou ajudar o Dev 1 na Branch X. Puxo pro meu local, aplico o script de migration para ter o banco igual ao dele. Depois, quando volto para branch Y.. o meu banco fica diferente e acaba apresentado problemas com versão anterior do meu banco antes de ir ajudar o Dev 1 na Branch X.

Estou em busca de alguma solução que me ajuda a fazer esse controle de versões do banco, faça as alterações quando preciso trabalhar em um branch futura e desfaça essas alterações quando volto para uma branch passada.

Alguém já teve esse problema? Como resolveram?

Carregando publicação patrocinada...
3
2

Cara, acho que essa seria a solução que estou procurando. Uma ferramenta mais pronta que não precise pensar em todas as variaveis possiveis e implementar isso tudo com scripts próprios.

Irei instalar o Liquibase no meu sistema e ver se resolve :)

Muito obrigado pela colaboração o/

2

as migrations registram (normalmente) no banco o estado e quais foram aplicadas. mudando de branch o ideal é que você destrua o banco e recrie ele por inteiro no seu ambiente local. ah, mas e os dados? de uma olhada em como gerar seeds no framework, rode num banco limpo as migrations + seeds e vc tem um banco pre populado para desenvolver

1

Cheguei a tentar isso amigo, posso ter feito algo errado, mas computadores que não tinham ssd ficava muito lento esse processo de desmontar o banco e montar novamente :/

1
1

Então, não tenho essa informação de cabeça. Mas o problema estava na implementação, no final das contas. Usei o Liquibase que o rnpr4541 indicou e resolveu o meu problema bem :)

1
1

E se ao ir ajudar seu colega você usasse o banco em um container docker ao invés de usar o banco da branch que você estava desenvolvendo? Vocês tem uma tabela para controlar as migrations que foram executadas? Eu imagino que isso possa ajudar também...

1

Não se ajuda a resolver seu problema, mas além do git existe o DVC (data version control).
Neste artigo, voce encontra uma explicação com um exemplo, mas basicamente:

DVC is, therefore, a system that involves tracking our datasets by registering changes on a particular dataset. There are multiple DVC solutions both free and paid. I recently discovered Hangar, a fully open-source Python DVC package.