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:
- Versão Local Dev 1 na Branch X
- Versão Local Dev 2 na Branch Y
- Versão do ambiente de testes
- Versão do ambiente de produção
Estamos com alguns problemas e são eles:
- 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.
- 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?
Bom dia,
Não sei como estás a fazer o controlo de versões, mas existe uma ferramente opensource chamada liquibase que é orientada ao controlo de versões de schemas de BD.
pode ser que ajude
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
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...
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.