SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
PostgreSQL




            Processo de manutenção evolutiva de
              modelo de dados: Estudo de caso
                     PostgreSQL e Git
                        Leonardo Cezar




www.postgresql.org.br    www.latinoware.org 2010   leo@postgresql.org.br
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ções




www.postgresql.org.br          www.latinoware.org 2010   leo@postgresql.org.br
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
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
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
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 centralizado

www.postgresql.org.br                www.latinoware.org 2010   leo@postgresql.org.br
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
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 O'Sullivan


    “Por uma questão democrática utilizaremos o git”
                                                  Leonardo Cezar

www.postgresql.org.br   www.latinoware.org 2010        leo@postgresql.org.br
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
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
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
PostgreSQL

 Controle de versão

     ●   Qual o problema?

          $ vim modelo.sql
          CREATE TABLE pessoa(
              id INTEGER
              ,nome TEXT
          );

          $ cat modelo.sql | psql
          CREATE TABLE




www.postgresql.org.br            www.latinoware.org 2010   leo@postgresql.org.br
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 exists




www.postgresql.org.br         www.latinoware.org 2010    leo@postgresql.org.br
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
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
                –   SEQUENCES



www.postgresql.org.br           www.latinoware.org 2010   leo@postgresql.org.br
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
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
            salario


www.postgresql.org.br          www.latinoware.org 2010   leo@postgresql.org.br
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

                            salario


www.postgresql.org.br                      www.latinoware.org 2010       leo@postgresql.org.br
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 resolve

www.postgresql.org.br          www.latinoware.org 2010   leo@postgresql.org.br
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.sh



www.postgresql.org.br          www.latinoware.org 2010     leo@postgresql.org.br
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
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
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 TABLE




www.postgresql.org.br          www.latinoware.org 2010   leo@postgresql.org.br
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
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
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.br
www.postgresql.org.br         www.latinoware.org 2010   leo@postgresql.org.br

Contenu connexe

Similaire à Versionamento de modelo de dados com PostgreSQL

Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a
Rômulo Jales
 

Similaire à Versionamento de modelo de dados com PostgreSQL (20)

Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a
 
Minicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACMinicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENAC
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Descomplicando o controle de versão com git
Descomplicando o controle de versão com gitDescomplicando o controle de versão com git
Descomplicando o controle de versão com git
 
Controle de Versões com Git
Controle de Versões com GitControle de Versões com Git
Controle de Versões com Git
 
Ferramenta Flow - Análise estática de códigos javascript
Ferramenta Flow - Análise estática de códigos javascriptFerramenta Flow - Análise estática de códigos javascript
Ferramenta Flow - Análise estática de códigos javascript
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
 
Git
GitGit
Git
 
Pgquarrel
PgquarrelPgquarrel
Pgquarrel
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)
 
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro Vieira
 
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoCurso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
 
jQuery
jQueryjQuery
jQuery
 
jQuery
jQueryjQuery
jQuery
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
pgModeler: muito mais que um modelador de bancos de dados PostgreSQL
pgModeler: muito mais que um modelador de bancos de dados PostgreSQLpgModeler: muito mais que um modelador de bancos de dados PostgreSQL
pgModeler: muito mais que um modelador de bancos de dados PostgreSQL
 

Plus de Leonardo Cezar (8)

Alta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLAlta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQL
 
Funções Administrativas no PostgreSQL
Funções Administrativas no PostgreSQLFunções Administrativas no PostgreSQL
Funções Administrativas no PostgreSQL
 
Situação da migração para PostgreSQL
Situação da migração para PostgreSQLSituação da migração para PostgreSQL
Situação da migração para PostgreSQL
 
Interoperabilidade dados abertos
Interoperabilidade dados abertosInteroperabilidade dados abertos
Interoperabilidade dados abertos
 
Migracao colaborativa
Migracao colaborativaMigracao colaborativa
Migracao colaborativa
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 
Sql proficiente
Sql proficienteSql proficiente
Sql proficiente
 

Dernier

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Dernier (6)

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

Versionamento de modelo de dados com PostgreSQL

  • 1. PostgreSQL Processo de manutenção evolutiva de modelo de dados: Estudo de caso PostgreSQL e Git Leonardo Cezar www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  • 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ções www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  • 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. 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. 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. 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 centralizado www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  • 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. 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 O'Sullivan “Por uma questão democrática utilizaremos o git” Leonardo Cezar www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  • 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. 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. 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. PostgreSQL Controle de versão ● Qual o problema? $ vim modelo.sql CREATE TABLE pessoa( id INTEGER ,nome TEXT ); $ cat modelo.sql | psql CREATE TABLE www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  • 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 exists www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  • 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. 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 – SEQUENCES www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  • 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. 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 salario www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  • 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 salario www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  • 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 resolve www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  • 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.sh www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  • 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. 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. 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 TABLE www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br
  • 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. 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. 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.br www.postgresql.org.br www.latinoware.org 2010 leo@postgresql.org.br