PostgreSQL            Processo de manutenção evolutiva de              modelo de dados: Estudo de caso                    ...
PostgreSQL Controle de versão     ●   Características          ●   Acompanhamento do histórico de mudanças;          ●   E...
PostgreSQL Versionamento de DDL     ●   Vantagens          ●   Acompanhar o histórico de mudanças;          ●   Entender q...
PostgreSQL Versionamento de DDL     ●   Problema:          ●   As alterações devem refletir as instruções ALTER           ...
PostgreSQL Controle de versão    Exemplo          $ touch modelo.sql          [alterações em modelo.sql]          $ cp mod...
PostgreSQL RVCS     ●   Modelo          ●   Centralizado:                –   Repositório central                –   Operaç...
PostgreSQL Controle de versão     ●   Ferramentas           ●   Subversion           ●   CVS (ugh!)           ●   Bazaar  ...
PostgreSQL Controle de versão    ... mas qual a melhor ferramenta?    “A questão fundamental a ser considerada são os    t...
PostgreSQL Controle de versão     ●   Como funciona?          $ git checkout -b pessoa          $ touch modelo.sql        ...
PostgreSQL Controle de versão     ●   Diferenciar          $ diff modelo.sql modelo_20101110.sql > a.patch          $ cat ...
PostgreSQL Controle de versão     ●   Diferenciar com git          $ git diff          diff --git a/modelo.sql b/modelo.sq...
PostgreSQL Controle de versão     ●   Qual o problema?          $ vim modelo.sql          CREATE TABLE pessoa(            ...
PostgreSQL Controle de versão     ●   Qual o problema?          $ vim modelo.sql          CREATE TABLE pessoa(            ...
PostgreSQL Controle de versão     ●   Utilizando git-diff?          $ git diff          diff --git a/modelo.sql b/modelo.s...
PostgreSQL Controle de versão     ●   Solução: apgdiff http://apgdiff.startnet.biz/           ●   Comparação semântica de ...
PostgreSQL Controle de versão     ●   Sim, com apgdiff “nós podemos!!”          $ apgdiff modelo.sql modelo_v2010.sql     ...
PostgreSQL Controle de versão     ●   Voltando um pouco ...           ●   Git trabalha com branches e podemos visualiza-lo...
PostgreSQL Gerenciamento de branches     ●   Arquivo modelo.sql                                  2                6       ...
PostgreSQL Controle de versão     ●   É possível verificar diferenças entre dois         branches:            $ git diff m...
PostgreSQL Controlando alterações DDL     ●   Definindo uma ferramenta de diff externo           cat > $HOME/bin/diff-ext....
PostgreSQL Controlando alterações DDL     ●   Utilizando a nova ferramenta de diff externo            $ git diff master pe...
PostgreSQL Acompanhando mudanças     ●   Visualizando mudanças     $ git blame modelo.sql     59dc48f8     (Huguinho   201...
PostgreSQL Interagindo com o banco     ●   Aplicar mudanças do branch no banco            $ git diff master pessoa | psql ...
PostgreSQL Comparação de esquema físico     ●   Algo um pouco mais interessante:            $ pg_dump -U postgres -st pess...
PostgreSQL Outras utilidades     ●   Acompanhar logs de gravação (git log)     ●   Organizar o histórico de gravações (git...
PostgreSQL Agradecimentos                               Tom Lane                            Bruce Momjian                 ...
Próximos SlideShares
Carregando em…5
×

Versionamento de modelo de dados com PostgreSQL

1.195 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.195
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
8
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no 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

×