SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Automation Framework Presentation
Automation Framework PresentationAutomation Framework Presentation
Automation Framework PresentationBen Ngo
 
Office y Power BI: Usando Visio y Power Point para visualizar y analizar datos
Office y Power BI: Usando Visio y Power Point para visualizar y analizar datosOffice y Power BI: Usando Visio y Power Point para visualizar y analizar datos
Office y Power BI: Usando Visio y Power Point para visualizar y analizar datosdbLearner
 
Best Selenium Python Frameworks for Test automation.pdf
Best Selenium Python Frameworks for Test automation.pdfBest Selenium Python Frameworks for Test automation.pdf
Best Selenium Python Frameworks for Test automation.pdfpCloudy
 
Basic of jMeter
Basic of jMeter Basic of jMeter
Basic of jMeter Shub
 
Presentation on Apache Jmeter
Presentation on Apache JmeterPresentation on Apache Jmeter
Presentation on Apache JmeterSabitri Gaire
 
PostgreSQL Tutorial for Beginners | Edureka
PostgreSQL Tutorial for Beginners | EdurekaPostgreSQL Tutorial for Beginners | Edureka
PostgreSQL Tutorial for Beginners | EdurekaEdureka!
 
Database testing tutorial
Database testing tutorialDatabase testing tutorial
Database testing tutorialHarikaReddy115
 
74 Methods for Privilege Escalation Part 2
74 Methods for Privilege Escalation Part 274 Methods for Privilege Escalation Part 2
74 Methods for Privilege Escalation Part 2Hadess
 
Assespro pr-workshop-robot framework
Assespro pr-workshop-robot frameworkAssespro pr-workshop-robot framework
Assespro pr-workshop-robot frameworkMayara Fernandes
 
Listas em Prolog
Listas em PrologListas em Prolog
Listas em PrologNatã Melo
 
Robot Framework - principais características
Robot Framework - principais característicasRobot Framework - principais características
Robot Framework - principais característicasalinebiath
 
Introduction to performance testing
Introduction to performance testingIntroduction to performance testing
Introduction to performance testingTharinda Liyanage
 
Database Testing.pptx
Database Testing.pptxDatabase Testing.pptx
Database Testing.pptxssuser88c0fd1
 
Webinar: Strength in Numbers: Introduction to ClickHouse Cluster Performance
Webinar: Strength in Numbers: Introduction to ClickHouse Cluster PerformanceWebinar: Strength in Numbers: Introduction to ClickHouse Cluster Performance
Webinar: Strength in Numbers: Introduction to ClickHouse Cluster PerformanceAltinity Ltd
 

Was ist angesagt? (20)

Automation Framework Presentation
Automation Framework PresentationAutomation Framework Presentation
Automation Framework Presentation
 
Office y Power BI: Usando Visio y Power Point para visualizar y analizar datos
Office y Power BI: Usando Visio y Power Point para visualizar y analizar datosOffice y Power BI: Usando Visio y Power Point para visualizar y analizar datos
Office y Power BI: Usando Visio y Power Point para visualizar y analizar datos
 
Best Selenium Python Frameworks for Test automation.pdf
Best Selenium Python Frameworks for Test automation.pdfBest Selenium Python Frameworks for Test automation.pdf
Best Selenium Python Frameworks for Test automation.pdf
 
Automation With A Tool Demo
Automation With A Tool DemoAutomation With A Tool Demo
Automation With A Tool Demo
 
Basic of jMeter
Basic of jMeter Basic of jMeter
Basic of jMeter
 
Presentation on Apache Jmeter
Presentation on Apache JmeterPresentation on Apache Jmeter
Presentation on Apache Jmeter
 
PostgreSQL Tutorial for Beginners | Edureka
PostgreSQL Tutorial for Beginners | EdurekaPostgreSQL Tutorial for Beginners | Edureka
PostgreSQL Tutorial for Beginners | Edureka
 
Junit
JunitJunit
Junit
 
Database testing tutorial
Database testing tutorialDatabase testing tutorial
Database testing tutorial
 
Oracle SQL Basics
Oracle SQL BasicsOracle SQL Basics
Oracle SQL Basics
 
74 Methods for Privilege Escalation Part 2
74 Methods for Privilege Escalation Part 274 Methods for Privilege Escalation Part 2
74 Methods for Privilege Escalation Part 2
 
Assespro pr-workshop-robot framework
Assespro pr-workshop-robot frameworkAssespro pr-workshop-robot framework
Assespro pr-workshop-robot framework
 
Listas em Prolog
Listas em PrologListas em Prolog
Listas em Prolog
 
Robot Framework - principais características
Robot Framework - principais característicasRobot Framework - principais características
Robot Framework - principais características
 
JUNit Presentation
JUNit PresentationJUNit Presentation
JUNit Presentation
 
J Meter Intro
J Meter IntroJ Meter Intro
J Meter Intro
 
Introduction to performance testing
Introduction to performance testingIntroduction to performance testing
Introduction to performance testing
 
Intermediate QuickBooks for Nonprofits
Intermediate QuickBooks for NonprofitsIntermediate QuickBooks for Nonprofits
Intermediate QuickBooks for Nonprofits
 
Database Testing.pptx
Database Testing.pptxDatabase Testing.pptx
Database Testing.pptx
 
Webinar: Strength in Numbers: Introduction to ClickHouse Cluster Performance
Webinar: Strength in Numbers: Introduction to ClickHouse Cluster PerformanceWebinar: Strength in Numbers: Introduction to ClickHouse Cluster Performance
Webinar: Strength in Numbers: Introduction to ClickHouse Cluster Performance
 

Ähnlich wie Versionamento de modelo de dados com PostgreSQL

Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Fabrízio Mello
 
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
 
Minicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACMinicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACDanilo Pinotti
 
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 UVAThiago Cifani
 
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 gitHumberto Streb
 
Controle de Versões com Git
Controle de Versões com GitControle de Versões com Git
Controle de Versões com GitVagner Santana
 
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 javascriptRodrigo Ferreira
 
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)Dickson S. Guedes
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Danilo Pinotti
 
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 2019Tchelinux
 
PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPedro Fernandes 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ódigoGuilhermeJorgeAragod
 
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-ptPedro Sousa
 
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 PostgreSQLRaphael Silva
 

Ähnlich wie 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
 

Mehr von Leonardo Cezar

Alta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLAlta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLLeonardo Cezar
 
Funções Administrativas no PostgreSQL
Funções Administrativas no PostgreSQLFunções Administrativas no PostgreSQL
Funções Administrativas no PostgreSQLLeonardo Cezar
 
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 PostgreSQLLeonardo Cezar
 
Interoperabilidade dados abertos
Interoperabilidade dados abertosInteroperabilidade dados abertos
Interoperabilidade dados abertosLeonardo Cezar
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la DebianLeonardo Cezar
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la DebianLeonardo Cezar
 

Mehr von 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
 

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