Latinoware 2012
Oficina PostgreSQL Básico


    Fabrízio de Royes Mello
   fabriziomello@gmail.com
         @fabriziomello

 http://www.postgresql.org.br
 http://listas.postgresql.org.br
Apresentação

   Fabrízio de Royes Mello (fabriziomello@gmail.com)
   Gerente de Tecnologia
   Bacharel em Informática pela URCAMP – Bagé/RS
   Experiência Profissional
       Desenvolvimento de Software desde 1993
       Experiência em PostgreSQL desde 1999
       Experiência em PHP desde 2002
       Consultor/Coach PostgreSQL
       Colaborador Comunidade Brasileira PostgreSQL
       Colaborador PGDG – PostgreSQL Global Development
        Group
Agenda

   Introdução
   Preparação do Servidor
   Manipulando Bancos de Dados
Ambiente Oficina

   Ubuntu 12.04
   PostgreSQL 9.2
Introdução

   Breve Histórico
   Arquitetura do PostgreSQL
Breve Histórico
   Antes : Oriundo do INGRES
   1986 : Início Projeto (Berkley)
   1987 : Primeira versão do Postgres
   1991 : versão 3 com principais funcionalidades atuais
   1993 : versão 4.2, última lançada pela Berkley
   1994 : Andrew Yu e Jolly Chen lançam Postgre95 com interpretador para
    linguagem SQL
   1997 : Nome muda para PostgreSQL, versão 6 lançada
   2000 : versão 7 lançada com suporte a FK
   2005 : versão 8 lançada com versão nativa Windows, Tablespaces,
    Savepoints, Point-In-Time-Recovery
   2005 : versão 8.1 Commit Tho Phases, Roles
   2006 : versão 8.2 (Insert, Update, Delete) Returning, melhora performance
    OLTP e BI
   2008 : versão 8.3 debug PL/PgSQL, Tsearch2 (XML) no core
   2009 : versão 8.4 Windowing Functions, Common Table Expressions and
    Recursive Queries, Parallel Restore, ”pg_upgrade”
   2010 : versão 9.0 Hot Standby and Streaming Replication (assincrona)
   2011 : versão 9.1 Synchronous Streaming Replication, Extensions, FDWs
   2012 : versão 9.2 Index-Only Scans, JSON, PLV8, Cascade Replication
Arquitetura

   Modelo Cliente/Servidor
       Processo Servidor (postgres)
       Aplicação Cliente (text, gui, web, etc)
   Faz uma cópia (fork) do processo servidor para
    cada conexão cliente
   Processos auxiliares
       Checkpointer
       Writer
       Wal Writer
       Autovacuum
       Stats Collector
Arquitetura
Preparação Servidor

        Instalação e Configuração
        Usuário ”postgres” sistema Operacional
        Entendendo e Trabalhando com Clusters
        Iniciando/Parando o Servidor PostgreSQL




Fonte: Manoel Pimental Medeiros - visaoagil.wordpress.com
Instalação e Configuração

   Repositórios Ubuntu 12.04
        $ sudo ­s   (senha latinoware2012)
        $ add­apt­repository ppa:pitti/postgresql
        $ apt­get update
        $ apt­get install postgresql­9.2
   Verificando se as coisas estão OK!
        $ pg_lsclusters
   Listar Bases de Dados
        $ psql ­U postgres ­l
       Oops... erro autenticação!!!!
Instalação e Configuração

   Configurar pg_hba.conf
      $ sudo vim 
      /etc/postgresql/9.2/main/pg_hba.conf
      Trocar ident e md5 por ”trust” e salvar
      $ sudo /etc/init.d/postgresql­9.2 reload
   Listar Bases de Dados (novamente)
      $ psql ­U postgres ­l    (gravem isso!!)
      Agora sim!!!!
Usuário ”postgres” S.O.

   Encapsular atividades em um único usuário
       Usuário ”postgres” que executa binários
       Arquivos de configuração e datafiles tem owner e
        group = ”postgres”
   Uma breve ”verificação”
        $ ls ­al  /etc/postgresql/9.2/main
        $ ls ­al  /var/lib/postgresql/9.2
        $ ps aux | egrep '^postgres'
Entendendo e Trabalhando
                          com Clusters
   Cluster = agrupamento de bancos de dados
   Gerenciado por um ”processo servidor"
   Listar clusters (debian based - pg_common)
       $ pg_lsclusters 
   Criar clusters (debian based - pg_common)
       $ pg_createcluster
    http://www.postgresql.org/docs/9.2/static/app-initdb.html 
   Apagar clusters (debian based - pg_common)
       $ pg_dropcluster 
Entendendo e Trabalhando
                         com Clusters
   Exercício
       Criar um cluster chamado ”latinoware”
       Criar um cluster chamado ”oficina”
       Configurar autenticação clusters (pg_hba.conf)
       Listar clusters
       Apagar cluster ”oficina”

   Respostas
    $ sudo pg_createcluster 9.2 latinoware
    $ sudo pg_createcluster 9.2 oficina
    $ sudo vim /etc/postgresql/9.2/**/pg_hba.conf
    $ pg_lsclusters
    $ sudo pg_dropcluster ­­stop 9.2 oficina
Iniciando/Parando
                         Servidor PostgreSQL
   Iniciando Servidor
         $ sudo /etc/init.d/postgresql start 9.2 
   Parando Servidor
         $ sudo /etc/init.d/postgresql stop 9.2
   Reiniciando Servidor
         $ sudo /etc/init.d/postgresql restart 9.2
   Recarregando Configurações
        $ sudo /etc/init.d/postgresql reload 9.2
    http://www.postgresql.org/docs/9.2/static/app-pg-ctl.html
Manipulando
                                              Bancos de Dados
        Criando um Banco de Dados
        Banco de Dados Template
        Removendo Banco de Dados
        Localização Física no Sistema de Arquivos




Fonte: Manoel Pimental Medeiros - visaoagil.wordpress.com
Criando um Banco de Dados

   Utilitário ”createdb”
       $ createdb ­U postgres latino1 
    http://www.postgresql.org/docs/9.2/static/app-createdb.html


   SQL ”CREATE DATABASE”
       $ psql ­U postgres 
       postgres=# CREATE DATABASE latino1;


    http://www.postgresql.org/docs/9.2/static/sql-createdatabase.html
Banco de Dados Template

   Template = Banco de Dados Modelo
   CREATE DATABASE, atualmente, ”copia” uma
    base de dados existente, por padrão
    ”template1”
   Existe outro banco template chamado
    ”template0” que é um ”banco virgem”
   Criando ou banco por template
       $ createdb -U postgres -T latino1 latino2
    http://www.postgresql.org/docs/9.2/static/manage-ag-templatedbs.html
Removendo
                            Bancos de Dados
   Utilitário ”dropdb”
       $ dropdb ­U postgres latino2 
    http://www.postgresql.org/docs/9.2/static/app-dropdb.html


   SQL ”DROP DATABASE”
       $ psql ­U postgres 
       postgres=# DROP DATABASE latino2;


    http://www.postgresql.org/docs/9.2/static/sql-dropdatabase.html
Localização Física no
                    Sistema de Arquivos
   Cluster
      $ psql ­U postgres
      postgres=# SHOW data_directory


   Configurações
      $ psql ­U postgres 
      postgres=# SHOW config_file;
      postgres=# SHOW hba_file;
Exercícios

   Criar / Apagar Cluster
   Criar Banco de Dados
   Criar Banco usando anterior como template

   Dica: Mudar cluster atual da sessão
       export PGCLUSTER=9.2/nome_do_cluster
Algumas Referências!


   Nacionais
    http://www.postgresql.org.br
    https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


   Internacionais
    http://www.postgresql.org (Site oficial)
    http://www.postgresql.org/community/lists/
Dúvidas/Críticas/Sugestões!!!

     Fabrízio de Royes Mello
     fabriziomello@gmail.com

  http://fabriziomello.blogspot.com

Oficina PostgreSQL Básico Latinoware 2012

  • 1.
    Latinoware 2012 Oficina PostgreSQLBásico Fabrízio de Royes Mello fabriziomello@gmail.com @fabriziomello http://www.postgresql.org.br http://listas.postgresql.org.br
  • 2.
    Apresentação  Fabrízio de Royes Mello (fabriziomello@gmail.com)  Gerente de Tecnologia  Bacharel em Informática pela URCAMP – Bagé/RS  Experiência Profissional  Desenvolvimento de Software desde 1993  Experiência em PostgreSQL desde 1999  Experiência em PHP desde 2002  Consultor/Coach PostgreSQL  Colaborador Comunidade Brasileira PostgreSQL  Colaborador PGDG – PostgreSQL Global Development Group
  • 3.
    Agenda  Introdução  Preparação do Servidor  Manipulando Bancos de Dados
  • 4.
    Ambiente Oficina  Ubuntu 12.04  PostgreSQL 9.2
  • 5.
    Introdução  Breve Histórico  Arquitetura do PostgreSQL
  • 6.
    Breve Histórico  Antes : Oriundo do INGRES  1986 : Início Projeto (Berkley)  1987 : Primeira versão do Postgres  1991 : versão 3 com principais funcionalidades atuais  1993 : versão 4.2, última lançada pela Berkley  1994 : Andrew Yu e Jolly Chen lançam Postgre95 com interpretador para linguagem SQL  1997 : Nome muda para PostgreSQL, versão 6 lançada  2000 : versão 7 lançada com suporte a FK  2005 : versão 8 lançada com versão nativa Windows, Tablespaces, Savepoints, Point-In-Time-Recovery  2005 : versão 8.1 Commit Tho Phases, Roles  2006 : versão 8.2 (Insert, Update, Delete) Returning, melhora performance OLTP e BI  2008 : versão 8.3 debug PL/PgSQL, Tsearch2 (XML) no core  2009 : versão 8.4 Windowing Functions, Common Table Expressions and Recursive Queries, Parallel Restore, ”pg_upgrade”  2010 : versão 9.0 Hot Standby and Streaming Replication (assincrona)  2011 : versão 9.1 Synchronous Streaming Replication, Extensions, FDWs  2012 : versão 9.2 Index-Only Scans, JSON, PLV8, Cascade Replication
  • 7.
    Arquitetura  Modelo Cliente/Servidor  Processo Servidor (postgres)  Aplicação Cliente (text, gui, web, etc)  Faz uma cópia (fork) do processo servidor para cada conexão cliente  Processos auxiliares  Checkpointer  Writer  Wal Writer  Autovacuum  Stats Collector
  • 8.
  • 9.
    Preparação Servidor  Instalação e Configuração  Usuário ”postgres” sistema Operacional  Entendendo e Trabalhando com Clusters  Iniciando/Parando o Servidor PostgreSQL Fonte: Manoel Pimental Medeiros - visaoagil.wordpress.com
  • 10.
    Instalação e Configuração  Repositórios Ubuntu 12.04 $ sudo ­s   (senha latinoware2012) $ add­apt­repository ppa:pitti/postgresql $ apt­get update $ apt­get install postgresql­9.2  Verificando se as coisas estão OK! $ pg_lsclusters  Listar Bases de Dados $ psql ­U postgres ­l  Oops... erro autenticação!!!!
  • 11.
    Instalação e Configuração  Configurar pg_hba.conf $ sudo vim  /etc/postgresql/9.2/main/pg_hba.conf Trocar ident e md5 por ”trust” e salvar $ sudo /etc/init.d/postgresql­9.2 reload  Listar Bases de Dados (novamente) $ psql ­U postgres ­l    (gravem isso!!) Agora sim!!!!
  • 12.
    Usuário ”postgres” S.O.  Encapsular atividades em um único usuário  Usuário ”postgres” que executa binários  Arquivos de configuração e datafiles tem owner e group = ”postgres”  Uma breve ”verificação” $ ls ­al  /etc/postgresql/9.2/main $ ls ­al  /var/lib/postgresql/9.2 $ ps aux | egrep '^postgres'
  • 13.
    Entendendo e Trabalhando com Clusters  Cluster = agrupamento de bancos de dados  Gerenciado por um ”processo servidor"  Listar clusters (debian based - pg_common) $ pg_lsclusters   Criar clusters (debian based - pg_common) $ pg_createcluster http://www.postgresql.org/docs/9.2/static/app-initdb.html   Apagar clusters (debian based - pg_common) $ pg_dropcluster 
  • 14.
    Entendendo e Trabalhando com Clusters  Exercício  Criar um cluster chamado ”latinoware”  Criar um cluster chamado ”oficina”  Configurar autenticação clusters (pg_hba.conf)  Listar clusters  Apagar cluster ”oficina”  Respostas $ sudo pg_createcluster 9.2 latinoware $ sudo pg_createcluster 9.2 oficina $ sudo vim /etc/postgresql/9.2/**/pg_hba.conf $ pg_lsclusters $ sudo pg_dropcluster ­­stop 9.2 oficina
  • 15.
    Iniciando/Parando Servidor PostgreSQL  Iniciando Servidor $ sudo /etc/init.d/postgresql start 9.2   Parando Servidor $ sudo /etc/init.d/postgresql stop 9.2  Reiniciando Servidor $ sudo /etc/init.d/postgresql restart 9.2  Recarregando Configurações  $ sudo /etc/init.d/postgresql reload 9.2 http://www.postgresql.org/docs/9.2/static/app-pg-ctl.html
  • 16.
    Manipulando Bancos de Dados  Criando um Banco de Dados  Banco de Dados Template  Removendo Banco de Dados  Localização Física no Sistema de Arquivos Fonte: Manoel Pimental Medeiros - visaoagil.wordpress.com
  • 17.
    Criando um Bancode Dados  Utilitário ”createdb” $ createdb ­U postgres latino1  http://www.postgresql.org/docs/9.2/static/app-createdb.html  SQL ”CREATE DATABASE” $ psql ­U postgres  postgres=# CREATE DATABASE latino1; http://www.postgresql.org/docs/9.2/static/sql-createdatabase.html
  • 18.
    Banco de DadosTemplate  Template = Banco de Dados Modelo  CREATE DATABASE, atualmente, ”copia” uma base de dados existente, por padrão ”template1”  Existe outro banco template chamado ”template0” que é um ”banco virgem”  Criando ou banco por template $ createdb -U postgres -T latino1 latino2 http://www.postgresql.org/docs/9.2/static/manage-ag-templatedbs.html
  • 19.
    Removendo Bancos de Dados  Utilitário ”dropdb” $ dropdb ­U postgres latino2  http://www.postgresql.org/docs/9.2/static/app-dropdb.html  SQL ”DROP DATABASE” $ psql ­U postgres  postgres=# DROP DATABASE latino2; http://www.postgresql.org/docs/9.2/static/sql-dropdatabase.html
  • 20.
    Localização Física no Sistema de Arquivos  Cluster $ psql ­U postgres postgres=# SHOW data_directory  Configurações $ psql ­U postgres  postgres=# SHOW config_file; postgres=# SHOW hba_file;
  • 21.
    Exercícios  Criar / Apagar Cluster  Criar Banco de Dados  Criar Banco usando anterior como template  Dica: Mudar cluster atual da sessão  export PGCLUSTER=9.2/nome_do_cluster
  • 22.
    Algumas Referências!  Nacionais http://www.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral  Internacionais http://www.postgresql.org (Site oficial) http://www.postgresql.org/community/lists/
  • 23.
    Dúvidas/Críticas/Sugestões!!! Fabrízio de Royes Mello fabriziomello@gmail.com http://fabriziomello.blogspot.com