Versionamento de modelo de dados com PostgreSQL

1,029 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,029
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Versionamento de modelo de dados com PostgreSQL

  1. 1. PostgreSQL Processo de manutenção evolutiva de modelo de dados: Estudo de caso PostgreSQL e Git Leonardo Cezarwww.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  2. 2. PostgreSQL Controle de versão ● Características ● Acompanhamento do histórico de mudanças; ● Entender quando e porque foi feita uma alteração; ● Consolidação de versões (merging); ● Geração de baselines e “ramificações”; ● Controlar alterações; ● Aplicar alteraçõeswww.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  3. 3. PostgreSQL Versionamento de DDL ● Vantagens ● Acompanhar o histórico de mudanças; ● Entender quando e porque foi realizada uma alteração; ● Consolidação de modelos (merging); ● Geração de baselines (versões) e “ramificações”; ● Controlar alterações;www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  4. 4. PostgreSQL Versionamento de DDL ● Problema: ● As alterações devem refletir as instruções ALTER ou correspondente. CREATE TABLE pessoa( ● id INTEGER ,nome TEXT ● ,idade INTEGER ); ● ● Por exemplo: ALTER TABLE [ ONLY ] name [ * ] action [, ... ]www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  5. 5. PostgreSQL Controle de versão Exemplo $ touch modelo.sql [alterações em modelo.sql] $ cp modelo.sql modelo_20101110.sql Não leve a sério ...www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  6. 6. PostgreSQL RVCS ● Modelo ● Centralizado: – Repositório central – Operações atômicas no repos central; – Trabalho compartilhado; ● Distribuído: – Repositórios descentralizados – Não existe ponto único de falha – Operações de gravação otimizada – Compatível com modelo centralizadowww.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  7. 7. PostgreSQL Controle de versão ● Ferramentas ● Subversion ● CVS (ugh!) ● Bazaar ● Mercurial ● Git ● Codeville ● Arch ● [...]www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  8. 8. PostgreSQL Controle de versão ... mas qual a melhor ferramenta? “A questão fundamental a ser considerada são os tipos de arquivos que sua equipe trabalha e como você deseja que os membros de sua equipe interajam.” Bryan OSullivan “Por uma questão democrática utilizaremos o git” Leonardo Cezarwww.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  9. 9. PostgreSQL Controle de versão ● Como funciona? $ git checkout -b pessoa $ touch modelo.sql $ git add modelo.sql [alterações em modelo.sql] $ git commit -m criado atributo idade $ […] $ […] $ […] $ git merge ● Pronto!!!www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  10. 10. PostgreSQL Controle de versão ● Diferenciar $ diff modelo.sql modelo_20101110.sql > a.patch $ cat a.patch --- a/modelo.sql +++ b/modelo.sql @@ -1,4 +1,5 @@ CREATE TABLE pessoa( id INTEGER ,nome TEXT + ,idade INTEGER );www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  11. 11. PostgreSQL Controle de versão ● Diferenciar com git $ git diff diff --git a/modelo.sql b/modelo.sql index 8dab7b0..f7c2e68 100644 --- a/modelo.sql +++ b/modelo.sql @@ -1,4 +1,5 @@ CREATE TABLE pessoa( id INTEGER ,nome TEXT + ,idade INTEGER );www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  12. 12. PostgreSQL Controle de versão ● Qual o problema? $ vim modelo.sql CREATE TABLE pessoa( id INTEGER ,nome TEXT ); $ cat modelo.sql | psql CREATE TABLEwww.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  13. 13. PostgreSQL Controle de versão ● Qual o problema? $ vim modelo.sql CREATE TABLE pessoa( id INTEGER ,nome TEXT ,idade INTEGER ); $ git commit -am adicionado atributo idade $ cat modelo.sql | psql ERROR: relation "pessoa" already existswww.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  14. 14. PostgreSQL Controle de versão ● Utilizando git-diff? $ git diff diff --git a/modelo.sql b/modelo.sql index 8dab7b0..f7c2e68 100644 --- a/modelo.sql +++ b/modelo.sql @@ -1,4 +1,5 @@ CREATE TABLE pessoa( id INTEGER ,nome TEXT + ,idade INTEGER ); $ git diff HEAD^ | psql ERROR: syntax error at or near "diff" LINE 1: diff ^www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  15. 15. PostgreSQL Controle de versão ● Solução: apgdiff http://apgdiff.startnet.biz/ ● Comparação semântica de DDL; ● Ferramenta multiplataforma de CA/SL; ● Suporte a diversas instruções: – CREATE|ALTER TABLE – CREATE|ALTER VIEW – CREATE FUNCTION – COMMENT – SEQUENCESwww.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  16. 16. PostgreSQL Controle de versão ● Sim, com apgdiff “nós podemos!!” $ apgdiff modelo.sql modelo_v2010.sql ● ALTER TABLE pessoa ADD COLUMN idade INTEGER; ● ● No entanto, dependemos de dois arquivos de entrada: $ apgdiff --help Usage: apgdiff [options] <old_dump> <new_dump>www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  17. 17. PostgreSQL Controle de versão ● Voltando um pouco ... ● Git trabalha com branches e podemos visualiza-los através de git-branch: $ git branch * master pessoa salario ● E mudar de ramo com o comando checkout: $ git checkout pessoa master * pessoa salariowww.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  18. 18. PostgreSQL Gerenciamento de branches ● Arquivo modelo.sql 2 6 pessoa m ch erg n b ra e 1 4 7 master b ra n c h 3 5 8 salariowww.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  19. 19. PostgreSQL Controle de versão ● É possível verificar diferenças entre dois branches: $ git diff master pessoa diff --git a/modelo.sql b/modelo.sql index 8dab7b0..f7c2e68 100644 --- a/modelo.sql +++ b/modelo.sql @@ -1,4 +1,5 @@ CREATE TABLE pessoa( id INTEGER ,nome TEXT + ,idade INTEGER ); … mas ainda assim não resolvewww.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  20. 20. PostgreSQL Controlando alterações DDL ● Definindo uma ferramenta de diff externo cat > $HOME/bin/diff-ext.sh <<EOF $PATH_TO_PGDIFF/apgdiff "$2" "$5" EOF $ export GIT_EXTERNAL_DIFF=$HOME/bin/diff-ext.sh ● ou preferencialmente: .git/config [diff] external = /Users/lhcezar/bin/diff-ext.shwww.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  21. 21. PostgreSQL Controlando alterações DDL ● Utilizando a nova ferramenta de diff externo $ git diff master pessoa ALTER TABLE pessoa ADD COLUMN idade INTEGER; $ git diff pessoa master ALTER TABLE pessoa DROP COLUMN idade;www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  22. 22. PostgreSQL Acompanhando mudanças ● Visualizando mudanças $ git blame modelo.sql 59dc48f8 (Huguinho 2010-10-10 14:18:08 -0200 1) CREATE TABLE pessoa( 60ec4876 (Huguinho 2010-10-10 14:18:08 -0200 2) id INTEGER 46eg758c (Zezinho 2010-11-10 15:20:08 -0200 3) ,nome TEXT 876ce509 (Luizinho 2010-11-10 15:51:15 -0200 4) ,idade INTEGER 14cf1123 (Huguinho 2010-10-10 14:18:08 -0200 5) );www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  23. 23. PostgreSQL Interagindo com o banco ● Aplicar mudanças do branch no banco $ git diff master pessoa | psql ALTER TABLE ● Desfazer mudanças $ git diff pessoa master | psql ALTER TABLEwww.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  24. 24. PostgreSQL Comparação de esquema físico ● Algo um pouco mais interessante: $ pg_dump -U postgres -st pessoa | git diff master -- ALTER TABLE pessoa ADD COLUMN idade INTEGER; CREATE TABLE salario ( id INTEGER, id_pessoa INTEGER, valor numeric(12,6) );www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  25. 25. PostgreSQL Outras utilidades ● Acompanhar logs de gravação (git log) ● Organizar o histórico de gravações (git rebase) ● Enviar alterações por e-mail (git format-patch) ● Compartilhar área de trabalho (git pull) ● Trabalhar em modelos remotos (git clone) ● Criar unidades de testes (pgTAP)www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  26. 26. PostgreSQL Agradecimentos Tom Lane Bruce Momjian Dave Page Peter Eisentraut Miroslav Šulc Linus Torvalds Shawn O Pearce Junio C Hamano Eliane Domingos &t. all Muito obrigado! leo@postgresql.org.brwww.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br

×