SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
PostgreSQL 8.4

     Fernando Ike de Oliveira

      Empresa Brasil de Comunicação


                    FISL 10




Fernando Ike de Oliveira   FISL 10
Como escreve/fala isso aí?




       Escreve-se PostgreSQL ou postgres
       Fala-se postígres-és-qüi-uel ou postígres
       Não se diz/escreve: Postgree, PostGREE, Postgrí




                  Fernando Ike de Oliveira   FISL 10
Evolução




           Fernando Ike de Oliveira   FISL 10
Ciclo atual de lançamento




       Versão 8.3 (Outubro de 2008)
       Commit Fests (Março, Maio, Junho)
       Congelamento de Funções (Novembro)
       Exodos (Dezembro, Janeiro, Feveiro)
       Beta (Abril)
       Lançamento (Junho ou Julho)
       Mais de 200 novas funcionalidades




                      Fernando Ike de Oliveira   FISL 10
Visibility Maps




       Fim da configuração do FSM no postgresql.conf
       Na área de armazenamento é criado um arquivo por
       relação com sufixo _vm
       O VM é um mapeamento indicativo de quais tuplas estão
       visíveis ppara as transações e quais não precisam do
       vacuum
       redução de consumo de processamento e I/O




                  Fernando Ike de Oliveira   FISL 10
Default Stats Target




       default_statistics_target = 100
       Retirado do Guia de Tuning
       Alguns testes apontam problemas de performance
       pgtune (ferramenta auxiliar para tuning do postgresql.conf)




                   Fernando Ike de Oliveira   FISL 10
Algumas coisas mais de Performance...




      pg_restore com múltiplos processos
      Redução da frequência de I/O nas informações de
      estatísticas
      stats_temp_directory: indica um diretório que ele vai
      escrever o arquivo (utilizar em memória)
      Algoritmo Hash foi reescrito
      Novos métodos de Join (anti e semi)




                  Fernando Ike de Oliveira   FISL 10
Free Space Map




      Nova implamentação do Free Space Map
      Não usa mais a shared memory, agora usa o disco
          Remoção do parâmetro max_fsm_pages do
          postgresql.conf
          Remoção do parâmetro max_fsm_relations do
          postgresql.conf
      Adicionado no postgresql.conf o
      vacuum_freeze_table_age
          ignora o visibility map




                  Fernando Ike de Oliveira   FISL 10
Terminando processos




      8.0 -> select pg_cancel_backend(pid)
          Cancela a consulta
      8.4 -> select pg_terminate_backend(pid)
          Cancela o processo (conexão)




                 Fernando Ike de Oliveira   FISL 10
Privilégio por coluna

         Permite que criar ACL por coluna

   pagila=# CREATE ROLE fulano WITH LOGIN ENCRYPTED PASSWORD ’fulano’;
   CREATE ROLE
   pagila=# grant select (first_name, last_name) on actor_info to fulano;
   GRANT
   pagila=# SET SESSION AUTHORIZATION fulano;
   SET
   pagila=> select * from actor_info;
   ERRO: permissão negada para relação actor_info
   pagila=> select first_name, last_name from actor_info limit 2;
    first_name | last_name
   --------+-------
    PENELOPE   | GUINESS
    NICK       | WAHLBERG
   (1 registro)
   pagila=> z actor_info
                                Privilégios de acesso
    Esquema |    Nome    | Tipo | Privilégios de acesso | Column access privileges
   ------+--------+----+---------------+-----------------
    public | actor_info | view |                        | first_name:
                                                        :   fulano=r/postgres
                                                        : last_name:
                                                        :   fulano=r/postgres
   (1 registro)

   pagila=>




                         Fernando Ike de Oliveira   FISL 10
Banco de dados com localização diferentes


         Permite criar LC_COLLATE diferente do instalado por
         padrão
         Permite criar LC_TYPE diferente do instalado por padrão

   pagila=# CREATE DATABASE nova WITH ENCODING ’UTF8’
            LC_COLLATE=’en_GB.UTF-8’ LC_CTYPE=’en_GB.UTF-8’
    TEMPLATE template0;

   CREATE DATABASE
   pagila=# ł
                                  Lista dos bancos de dados
      Nome    |   Dono   | Codificação | Collation |      Ctype       | Privilégios de acesso
   -------+-------+---------+---------+---------+---------------
    nova      | postgres | UTF8        | en_GB.UTF-8 | en_GB.UTF-8     |
    pagila    | pagila   | UTF8        | pt_BR.UTF-8 | pt_BR.UTF-8     |
    postgres | postgres | UTF8         | pt_BR.UTF-8 | pt_BR.UTF-8     |
    template0 | postgres | UTF8        | pt_BR.UTF-8 | pt_BR.UTF-8     |   =c/postgres
                                                                       :   postgres=CTc/postgres
   template1 | postgres | UTF8             | pt_BR.UTF-8 | pt_BR.UTF-8 |   =c/postgres
                                                                       :   postgres=CTc/postgres
   (1 registro)

   pagila=#




                         Fernando Ike de Oliveira   FISL 10
Autenticação




      Suporte a autenticação com certificado SSL




                 Fernando Ike de Oliveira   FISL 10
função com parâmetro




        funções aceitam parâmetros padrão

  pagila=# create or replace function fancy_last_day
      (timestamp default current_timestamp::timestamp) returns date
          immutable language sql as $$ SELECT CASE WHEN EXTRACT(MONTH FROM $1) =
          12 THEN (((EXTRACT(YEAR FROM $1) + 1) operator(pg_catalog.||)
          ’-01-01’)::date - INTERVAL ’1 day’)::date ELSE ((EXTRACT
          (YEAR FROM $1) operator(pg_catalog.||) ’-’ operator(pg_catalog.||)
          (EXTRACT(MONTH FROM $1) + 1) operator(pg_catalog.||) ’-01’)::date -
          INTERVAL ’1 day’)::date END $$;
  CREATE FUNCTION
  pagila=#




                        Fernando Ike de Oliveira   FISL 10
Tabela de estatísticas por função




         Tabela com estatísticas de execução de funções


   pagila=# select fancy_last_day();
    fancy_last_day
   -----------
    2009-06-30
   (1 registro)

   pagila=# select * from pg_stat_user_functions ;
    funcid | schemaname |     funcname    | calls | total_time | self_time
    -----+--------+-----------+-----+--------+-------
      17841 | public      | fancy_last_day |    12 |          6 |         6
      (1 registro)

   pagila=#




                         Fernando Ike de Oliveira   FISL 10
Auto Explain



        Módulo do Contrib que habilita o explain no log do
        postgresql automaticamente
        Pode ser carregado por sessão ou no postgresql.conf


    pagila=# load ’auto_explain’;
    LOAD
    pagila=# set auto_explain.log_min_duration = 2000;
    SET
    pagila=# select pg_sleep(3);
    pg_sleep
    -------
    (1 row)
    ~~
    LOG: duration: 3000.196 ms plan:
           Result (cost=0.00..0.01 rows=1 width=0)
   STATEMENT: select pg_sleep(3);




                        Fernando Ike de Oliveira   FISL 10
Novo tipo de dados: citext




         No Contrib, módulo com tipo de dados não sensitivo


   pagila=# CREATE TABLE usuario (nick CITEXT PRIMARY KEY, pass TEXT NOT NULL);NOTA:   CREATE TABL
   CREATE TABLE
   pagila=# INSERT INTO usuario VALUES (’Ronaldo’, md5(random()::text));
   INSERT 0 1
   pagila=# SELECT * from usuario WHERE nick = ’ronaldo’;
     nick   |               pass
     ------+-----------------------
      Ronaldo | 65965ffb9098f448db7982aacd8c747c
      (1 registro)

     pagila=#




                         Fernando Ike de Oliveira   FISL 10
Explain mais legível

         Explain exibe as colunas em sua saída


   pagila-# using (film_id);
   om film_actor join actor using (actor_id) join filmrst_name, last_name, title fro
   using (film_id);
                                                          QUERY PLAN
   --------------------------------------------------------------------------------
    Hash Join (cost=85.00..319.83 rows=5462 width=28) (actual time=3.413..39.603 rows=5462 loops
      Output: actor.first_name, actor.last_name, film.title
      Hash Cond: (film_actor.actor_id = actor.actor_id)
      -> Hash Join (cost=78.50..238.22 rows=5462 width=17) (actual time=2.813..24.658 rows=5462
            Output: film_actor.actor_id, film.title
            Hash Cond: (film_actor.film_id = film.film_id)
            -> Seq Scan on film_actor (cost=0.00..84.62 rows=5462 width=4) (actual time=0.007..
                  Output: film_actor.actor_id, film_actor.film_id, film_actor.last_update
            -> Hash (cost=66.00..66.00 rows=1000 width=19) (actual time=2.790..2.790 rows=1000
                  Output: film.title, film.film_id
                  -> Seq Scan on film (cost=0.00..66.00 rows=1000 width=19) (actual time=0.004.
                        Output: film.title, film.film_id
      -> Hash (cost=4.00..4.00 rows=200 width=17) (actual time=0.576..0.576 rows=200 loops=1)
            Output: actor.first_name, actor.last_name, actor.actor_id
            -> Seq Scan on actor (cost=0.00..4.00 rows=200 width=17) (actual time=0.010..0.271
                  Output: actor.first_name, actor.last_name, actor.actor_id
    Total runtime: 46.285 ms
   (1 registro)




                        Fernando Ike de Oliveira   FISL 10
With Recursivo




      Common Table Expression (CTE, Consultas com WITH)
      Declaração do WITH antes da Consulta




                 Fernando Ike de Oliveira   FISL 10
Exemplo do WITH em Fibonacci




  pagila=# WITH recursive Fib (i, j) AS (VALUES (0, 1) UNION ALL
      SELECT (i + j), (i + j) + j FROM Fib WHERE (i + j) < 100)
      SELECT i FROM Fib UNION ALL SELECT j FROM Fib ORDER BY i;

   i
  ---
     0
     1
     1
     2
     3
     5
     8
   13
   21
   34
   55
   89
  (1 registro)
  pagila=#




                        Fernando Ike de Oliveira   FISL 10
Antigamente para fazer consulta recursiva




   SELECT * FROM (select c1.first_name, c1.last_name, c1.store_id,
       p1.total, (select 1 + count(*) from customer c2 join
           (select customer_id, sum(amount) as total from only payment group by
           customer_id) p2 using (customer_id) where c2.store_id =
           c1.store_id and p2.total > p1.total) as rank from customer c1 join
           (select customer_id, sum(amount) as total from only payment
           group by customer_id) p1 using (customer_id)) x WHERE x.rank <=
           3 ORDER BY x.store_id, x.rank;




                         Fernando Ike de Oliveira   FISL 10
Agora com consulta recursiva...
... e com window function




     pagila=# select * from (with cte as ( select first_name, last_name,
         store_id, sum(amount) as total from payment join customer using
     (customer_id) group by first_name, last_name, store_id) select
     first_name, last_name, store_id, total, rank() over (partition by
     store_id order by total desc) from cte ) x where rank <= 3;

      first_name | last_name | store_id |      total    | rank
     --------+-------+-------+-----+----
      ELEANOR    | HUNT      |        1 |      216.54   |       1
      CLARA      | SHAW      |        1 |      195.58   |       2
      TOMMY      | COLLAZO   |        1 |      186.62   |       3
      KARL       | SEAL      |        2 |      221.55   |       1
      MARION     | SNYDER    |        2 |      194.61   |       2
      RHONDA     | KENNEDY   |        2 |      194.61   |       2
     (1 registro)

     pagila=#




                            Fernando Ike de Oliveira        FISL 10
LIMIT na subconsulta



   pagila=# SELECT title FROM film ORDER BY random() LIMIT (SELECT count(*)/10 FROM film WHERE ra
           title
   ---------------
    SHIP WONDERLAND
    AMELIE HELLFIGHTERS
    REDS POCUS
    LOCK REAR
    SILENCE KANE
    BENEATH RUSH
    GRAPES FURY
    VILLAIN DESPERATE
    VANISHING ROCKY
    DETAILS PACKER
    FIGHT JAWBREAKER
    FIDDLER LOST
    DYNAMITE TARZAN
    DADDY PITTSBURGH
    ANACONDA CONFESSIONS
    WONKA SEA
    WORDS HUNTER
   (1 registro)

   pagila=#




                         Fernando Ike de Oliveira   FISL 10
Busca parcial e Full Text Search




   pagila=# select title, description from film where fulltext @@ to_tsquery(’dog:*’)
   pagila-# except
   pagila-# select title, description from film where fulltext @@ to_tsquery(’dog’);
       title     |                                                   description
   ---------+----------------------------------------------------------------------------
    ARABIA DOGMA | A Touching Epistle of a Madman And a Mad Cow who must Defeat a Student in Nige
    DOGMA FAMILY | A Brilliant Character Study of a Database Administrator And a Monkey who must
   (1 registro)
   pagila=#




                         Fernando Ike de Oliveira   FISL 10
Comando Table



        Comando que exibe todas as colunas de uma tabela
        Em conformidade com padrão ANSI SQL

  pagila=# table language;
   language_id |         name         |     last_update
  ---------+---------------+--------------
             1 | English              | 2006-02-15 10:02:19
             2 | Italian              | 2006-02-15 10:02:19
             3 | Japanese             | 2006-02-15 10:02:19
             4 | Mandarin             | 2006-02-15 10:02:19
             5 | French               | 2006-02-15 10:02:19
             6 | German               | 2006-02-15 10:02:19
  (1 registro)

  pagila=#




                        Fernando Ike de Oliveira   FISL 10
Geração de tempo com intervalos




        Intervalo de tempo gerado pela função generate_series


      pagila=# select * from generate_series(now() - ’5 minutes’::interval,now(),’50 seconds’::
         generate_series
  --------------------
   2009-06-26 15:26:00.74239-03
   2009-06-26 15:26:50.74239-03
   2009-06-26 15:27:40.74239-03
   2009-06-26 15:28:30.74239-03
   2009-06-26 15:29:20.74239-03
   2009-06-26 15:30:10.74239-03
   2009-06-26 15:31:00.74239-03
  (1 registro)
  pagila=#




                       Fernando Ike de Oliveira   FISL 10
Edição mais fácil no PSQL




         ef

    CREATE FUNCTION add(integer, integer) RETURNS integer AS ’select 1+2;’ LANGUAGE SQL IMMUTABL
   RETURNS NULL ON NULL INPUT;




                         Fernando Ike de Oliveira   FISL 10
PSQL e compatibilidade




      O PSQL tem compatibilidade com todas as versões
      anteriores do PostgreSQL dos Comandos com barra




                Fernando Ike de Oliveira   FISL 10
Pg_Migrator




      Facilita a migração entre versões do PostgreSQL
      Opcionalmente não ocupa mais espaço em disco



      Método de Migração                    Tempo em minutos
         dump/restore                            300.0
    dump with parallel restore                   180.0
   pg_migrator em modo cópia                      44.0
    pg_migrator em modo link                      0.7




                 Fernando Ike de Oliveira    FISL 10
Funcionalidades para novas versões:




   8.5
         replicação síncrona
         suporte SE-Linux (SE-Postgres)
         Hot Standby




                    Fernando Ike de Oliveira   FISL 10
Referências




      http://www.postgresql.org/

      http://www.pgfoundry.org

      http://www.postgresql.org/community




                      Fernando Ike de Oliveira   FISL 10
Conclusão




  Contatos:
     fernando.ike@ebc.com.br
      fernando.ike@gmail.com
      http://www.midstorm.org/~fike/weblog

  PGCon Brasil 2009
     http://pgcon.postgresql.org.br




              Fernando Ike de Oliveira   FISL 10

Mais conteúdo relacionado

Mais procurados

Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Michael Castillo Granados
 
Leonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesLeonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesDevCamp Campinas
 
Lp script pug-pe
Lp script pug-peLp script pug-pe
Lp script pug-pehugoesb
 
Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)Hugo Maia Vieira
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesStanislaw Pusep
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Jstdc-globalcode
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 3
Implementação de Aplicações Móveis e Jogos com Python - Aula 3Implementação de Aplicações Móveis e Jogos com Python - Aula 3
Implementação de Aplicações Móveis e Jogos com Python - Aula 3Flávio Ribeiro
 
Sobre programas e funções: pensando em abstração
Sobre programas e funções: pensando em abstraçãoSobre programas e funções: pensando em abstração
Sobre programas e funções: pensando em abstraçãoArthur Xavier
 
ReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPLuis Gustavo Almeida
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 5
Implementação de Aplicações Móveis e Jogos com Python - Aula 5Implementação de Aplicações Móveis e Jogos com Python - Aula 5
Implementação de Aplicações Móveis e Jogos com Python - Aula 5Flávio Ribeiro
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 4
Implementação de Aplicações Móveis e Jogos com Python - Aula 4Implementação de Aplicações Móveis e Jogos com Python - Aula 4
Implementação de Aplicações Móveis e Jogos com Python - Aula 4Flávio Ribeiro
 

Mais procurados (19)

Agenda em bash e dialog
Agenda em bash e dialogAgenda em bash e dialog
Agenda em bash e dialog
 
NotORM
NotORMNotORM
NotORM
 
Lista de exercícios em Bash (resolvida)
Lista de exercícios em Bash (resolvida) Lista de exercícios em Bash (resolvida)
Lista de exercícios em Bash (resolvida)
 
PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014
 
Leonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesLeonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional Interfaces
 
PHPT
PHPTPHPT
PHPT
 
Lp script pug-pe
Lp script pug-peLp script pug-pe
Lp script pug-pe
 
Python Class
Python ClassPython Class
Python Class
 
Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)
 
Shell script
Shell scriptShell script
Shell script
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testes
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
 
Sql proficiente
Sql proficienteSql proficiente
Sql proficiente
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 3
Implementação de Aplicações Móveis e Jogos com Python - Aula 3Implementação de Aplicações Móveis e Jogos com Python - Aula 3
Implementação de Aplicações Móveis e Jogos com Python - Aula 3
 
Sobre programas e funções: pensando em abstração
Sobre programas e funções: pensando em abstraçãoSobre programas e funções: pensando em abstração
Sobre programas e funções: pensando em abstração
 
ReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHP
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 5
Implementação de Aplicações Móveis e Jogos com Python - Aula 5Implementação de Aplicações Móveis e Jogos com Python - Aula 5
Implementação de Aplicações Móveis e Jogos com Python - Aula 5
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 4
Implementação de Aplicações Móveis e Jogos com Python - Aula 4Implementação de Aplicações Móveis e Jogos com Python - Aula 4
Implementação de Aplicações Móveis e Jogos com Python - Aula 4
 

Semelhante a PostgreSQL 8.4

Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Fabrízio Mello
 
pgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQLpgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQLelliando dias
 
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
 
Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Fabrízio Mello
 
Zabbix monitorando o zimbra collaboration 8.8 (1)
Zabbix   monitorando o zimbra collaboration 8.8 (1)Zabbix   monitorando o zimbra collaboration 8.8 (1)
Zabbix monitorando o zimbra collaboration 8.8 (1)PAULO R. DEOLINDO JUNIOR
 
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Alexandre Saboia Fuziyama
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Funções Administrativas no PostgreSQL
Funções Administrativas no PostgreSQLFunções Administrativas no PostgreSQL
Funções Administrativas no PostgreSQLLeonardo Cezar
 
Fundamentos Replicação MySQL
Fundamentos Replicação MySQLFundamentos Replicação MySQL
Fundamentos Replicação MySQLAlexandre Almeida
 
Apresentação interbase (atualização 2)
Apresentação interbase (atualização 2)Apresentação interbase (atualização 2)
Apresentação interbase (atualização 2)Elen Arantza
 
Spock Framework 2
Spock Framework 2Spock Framework 2
Spock Framework 2Ismael
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Luis Gustavo Almeida
 
PL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQLPL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQLJuliano Atanazio
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Cristiano Rafael Steffens
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 

Semelhante a PostgreSQL 8.4 (20)

Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010
 
pgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQLpgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQL
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010
 
Zabbix monitorando o zimbra collaboration 8.8 (1)
Zabbix   monitorando o zimbra collaboration 8.8 (1)Zabbix   monitorando o zimbra collaboration 8.8 (1)
Zabbix monitorando o zimbra collaboration 8.8 (1)
 
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Funções Administrativas no PostgreSQL
Funções Administrativas no PostgreSQLFunções Administrativas no PostgreSQL
Funções Administrativas no PostgreSQL
 
Fundamentos Replicação MySQL
Fundamentos Replicação MySQLFundamentos Replicação MySQL
Fundamentos Replicação MySQL
 
Apresentação interbase (atualização 2)
Apresentação interbase (atualização 2)Apresentação interbase (atualização 2)
Apresentação interbase (atualização 2)
 
Spock Framework 2
Spock Framework 2Spock Framework 2
Spock Framework 2
 
Destistificando o EXPLAIN
Destistificando o EXPLAIN Destistificando o EXPLAIN
Destistificando o EXPLAIN
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
(2013-05-03) AudioLazy - Slides
(2013-05-03) AudioLazy - Slides(2013-05-03) AudioLazy - Slides
(2013-05-03) AudioLazy - Slides
 
PL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQLPL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQL
 
Falando "Postgrês"
Falando "Postgrês"Falando "Postgrês"
Falando "Postgrês"
 
Php FrameWARks - sem CakePHP
Php FrameWARks - sem CakePHPPhp FrameWARks - sem CakePHP
Php FrameWARks - sem CakePHP
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Design patterns
Design patternsDesign patterns
Design patterns
 

Mais de Fernando Ike

Arquitetura de Micro Serviços
Arquitetura de Micro ServiçosArquitetura de Micro Serviços
Arquitetura de Micro ServiçosFernando Ike
 
(Quase) 10 anos de DevOps, e agora?
(Quase) 10 anos de DevOps, e agora? (Quase) 10 anos de DevOps, e agora?
(Quase) 10 anos de DevOps, e agora? Fernando Ike
 
Containers and Databases
Containers and DatabasesContainers and Databases
Containers and DatabasesFernando Ike
 
Infraestrutura Imutável - Agile Trends
Infraestrutura Imutável - Agile TrendsInfraestrutura Imutável - Agile Trends
Infraestrutura Imutável - Agile TrendsFernando Ike
 
Infraestrutura imutável - A base das aplicações na nuvem
Infraestrutura imutável - A base das aplicações na nuvemInfraestrutura imutável - A base das aplicações na nuvem
Infraestrutura imutável - A base das aplicações na nuvemFernando Ike
 
DevOps Anti-Patterns - Campus Party
DevOps Anti-Patterns - Campus PartyDevOps Anti-Patterns - Campus Party
DevOps Anti-Patterns - Campus PartyFernando Ike
 
Blameless: A culpa não é sua
Blameless: A culpa não é suaBlameless: A culpa não é sua
Blameless: A culpa não é suaFernando Ike
 
DevOps: A revolução ruidosa da TI
DevOps: A revolução ruidosa da TIDevOps: A revolução ruidosa da TI
DevOps: A revolução ruidosa da TIFernando Ike
 
Docker Swarm Cluster
Docker Swarm ClusterDocker Swarm Cluster
Docker Swarm ClusterFernando Ike
 
DevOps - Por onde começar
DevOps - Por onde começarDevOps - Por onde começar
DevOps - Por onde começarFernando Ike
 
DevOps Anti-Patterns
DevOps Anti-PatternsDevOps Anti-Patterns
DevOps Anti-PatternsFernando Ike
 
A lista do PostgerSQL Brasil caiu?
A lista do PostgerSQL Brasil caiu? A lista do PostgerSQL Brasil caiu?
A lista do PostgerSQL Brasil caiu? Fernando Ike
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucaoFernando Ike
 
Akamai Cloud Security
Akamai Cloud SecurityAkamai Cloud Security
Akamai Cloud SecurityFernando Ike
 
Management 3.0 - a vida pós-agilidade
Management 3.0 - a vida pós-agilidadeManagement 3.0 - a vida pós-agilidade
Management 3.0 - a vida pós-agilidadeFernando Ike
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida realFernando Ike
 
Docker e postgresql
Docker e postgresqlDocker e postgresql
Docker e postgresqlFernando Ike
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneosFernando Ike
 
Banco caiu! E a gora?
Banco caiu! E a gora?Banco caiu! E a gora?
Banco caiu! E a gora?Fernando Ike
 

Mais de Fernando Ike (20)

Arquitetura de Micro Serviços
Arquitetura de Micro ServiçosArquitetura de Micro Serviços
Arquitetura de Micro Serviços
 
(Quase) 10 anos de DevOps, e agora?
(Quase) 10 anos de DevOps, e agora? (Quase) 10 anos de DevOps, e agora?
(Quase) 10 anos de DevOps, e agora?
 
Containers and Databases
Containers and DatabasesContainers and Databases
Containers and Databases
 
Infraestrutura Imutável - Agile Trends
Infraestrutura Imutável - Agile TrendsInfraestrutura Imutável - Agile Trends
Infraestrutura Imutável - Agile Trends
 
Infraestrutura imutável - A base das aplicações na nuvem
Infraestrutura imutável - A base das aplicações na nuvemInfraestrutura imutável - A base das aplicações na nuvem
Infraestrutura imutável - A base das aplicações na nuvem
 
DevOps Anti-Patterns - Campus Party
DevOps Anti-Patterns - Campus PartyDevOps Anti-Patterns - Campus Party
DevOps Anti-Patterns - Campus Party
 
Blameless: A culpa não é sua
Blameless: A culpa não é suaBlameless: A culpa não é sua
Blameless: A culpa não é sua
 
DevOps: A revolução ruidosa da TI
DevOps: A revolução ruidosa da TIDevOps: A revolução ruidosa da TI
DevOps: A revolução ruidosa da TI
 
Docker Swarm Cluster
Docker Swarm ClusterDocker Swarm Cluster
Docker Swarm Cluster
 
DevOps - Por onde começar
DevOps - Por onde começarDevOps - Por onde começar
DevOps - Por onde começar
 
DevOps Anti-Patterns
DevOps Anti-PatternsDevOps Anti-Patterns
DevOps Anti-Patterns
 
A lista do PostgerSQL Brasil caiu?
A lista do PostgerSQL Brasil caiu? A lista do PostgerSQL Brasil caiu?
A lista do PostgerSQL Brasil caiu?
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucao
 
Akamai Cloud Security
Akamai Cloud SecurityAkamai Cloud Security
Akamai Cloud Security
 
Management 3.0 - a vida pós-agilidade
Management 3.0 - a vida pós-agilidadeManagement 3.0 - a vida pós-agilidade
Management 3.0 - a vida pós-agilidade
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida real
 
Devops
DevopsDevops
Devops
 
Docker e postgresql
Docker e postgresqlDocker e postgresql
Docker e postgresql
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneos
 
Banco caiu! E a gora?
Banco caiu! E a gora?Banco caiu! E a gora?
Banco caiu! E a gora?
 

PostgreSQL 8.4

  • 1. PostgreSQL 8.4 Fernando Ike de Oliveira Empresa Brasil de Comunicação FISL 10 Fernando Ike de Oliveira FISL 10
  • 2. Como escreve/fala isso aí? Escreve-se PostgreSQL ou postgres Fala-se postígres-és-qüi-uel ou postígres Não se diz/escreve: Postgree, PostGREE, Postgrí Fernando Ike de Oliveira FISL 10
  • 3. Evolução Fernando Ike de Oliveira FISL 10
  • 4. Ciclo atual de lançamento Versão 8.3 (Outubro de 2008) Commit Fests (Março, Maio, Junho) Congelamento de Funções (Novembro) Exodos (Dezembro, Janeiro, Feveiro) Beta (Abril) Lançamento (Junho ou Julho) Mais de 200 novas funcionalidades Fernando Ike de Oliveira FISL 10
  • 5. Visibility Maps Fim da configuração do FSM no postgresql.conf Na área de armazenamento é criado um arquivo por relação com sufixo _vm O VM é um mapeamento indicativo de quais tuplas estão visíveis ppara as transações e quais não precisam do vacuum redução de consumo de processamento e I/O Fernando Ike de Oliveira FISL 10
  • 6. Default Stats Target default_statistics_target = 100 Retirado do Guia de Tuning Alguns testes apontam problemas de performance pgtune (ferramenta auxiliar para tuning do postgresql.conf) Fernando Ike de Oliveira FISL 10
  • 7. Algumas coisas mais de Performance... pg_restore com múltiplos processos Redução da frequência de I/O nas informações de estatísticas stats_temp_directory: indica um diretório que ele vai escrever o arquivo (utilizar em memória) Algoritmo Hash foi reescrito Novos métodos de Join (anti e semi) Fernando Ike de Oliveira FISL 10
  • 8. Free Space Map Nova implamentação do Free Space Map Não usa mais a shared memory, agora usa o disco Remoção do parâmetro max_fsm_pages do postgresql.conf Remoção do parâmetro max_fsm_relations do postgresql.conf Adicionado no postgresql.conf o vacuum_freeze_table_age ignora o visibility map Fernando Ike de Oliveira FISL 10
  • 9. Terminando processos 8.0 -> select pg_cancel_backend(pid) Cancela a consulta 8.4 -> select pg_terminate_backend(pid) Cancela o processo (conexão) Fernando Ike de Oliveira FISL 10
  • 10. Privilégio por coluna Permite que criar ACL por coluna pagila=# CREATE ROLE fulano WITH LOGIN ENCRYPTED PASSWORD ’fulano’; CREATE ROLE pagila=# grant select (first_name, last_name) on actor_info to fulano; GRANT pagila=# SET SESSION AUTHORIZATION fulano; SET pagila=> select * from actor_info; ERRO: permissão negada para relação actor_info pagila=> select first_name, last_name from actor_info limit 2; first_name | last_name --------+------- PENELOPE | GUINESS NICK | WAHLBERG (1 registro) pagila=> z actor_info Privilégios de acesso Esquema | Nome | Tipo | Privilégios de acesso | Column access privileges ------+--------+----+---------------+----------------- public | actor_info | view | | first_name: : fulano=r/postgres : last_name: : fulano=r/postgres (1 registro) pagila=> Fernando Ike de Oliveira FISL 10
  • 11. Banco de dados com localização diferentes Permite criar LC_COLLATE diferente do instalado por padrão Permite criar LC_TYPE diferente do instalado por padrão pagila=# CREATE DATABASE nova WITH ENCODING ’UTF8’ LC_COLLATE=’en_GB.UTF-8’ LC_CTYPE=’en_GB.UTF-8’ TEMPLATE template0; CREATE DATABASE pagila=# ł Lista dos bancos de dados Nome | Dono | Codificação | Collation | Ctype | Privilégios de acesso -------+-------+---------+---------+---------+--------------- nova | postgres | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 | pagila | pagila | UTF8 | pt_BR.UTF-8 | pt_BR.UTF-8 | postgres | postgres | UTF8 | pt_BR.UTF-8 | pt_BR.UTF-8 | template0 | postgres | UTF8 | pt_BR.UTF-8 | pt_BR.UTF-8 | =c/postgres : postgres=CTc/postgres template1 | postgres | UTF8 | pt_BR.UTF-8 | pt_BR.UTF-8 | =c/postgres : postgres=CTc/postgres (1 registro) pagila=# Fernando Ike de Oliveira FISL 10
  • 12. Autenticação Suporte a autenticação com certificado SSL Fernando Ike de Oliveira FISL 10
  • 13. função com parâmetro funções aceitam parâmetros padrão pagila=# create or replace function fancy_last_day (timestamp default current_timestamp::timestamp) returns date immutable language sql as $$ SELECT CASE WHEN EXTRACT(MONTH FROM $1) = 12 THEN (((EXTRACT(YEAR FROM $1) + 1) operator(pg_catalog.||) ’-01-01’)::date - INTERVAL ’1 day’)::date ELSE ((EXTRACT (YEAR FROM $1) operator(pg_catalog.||) ’-’ operator(pg_catalog.||) (EXTRACT(MONTH FROM $1) + 1) operator(pg_catalog.||) ’-01’)::date - INTERVAL ’1 day’)::date END $$; CREATE FUNCTION pagila=# Fernando Ike de Oliveira FISL 10
  • 14. Tabela de estatísticas por função Tabela com estatísticas de execução de funções pagila=# select fancy_last_day(); fancy_last_day ----------- 2009-06-30 (1 registro) pagila=# select * from pg_stat_user_functions ; funcid | schemaname | funcname | calls | total_time | self_time -----+--------+-----------+-----+--------+------- 17841 | public | fancy_last_day | 12 | 6 | 6 (1 registro) pagila=# Fernando Ike de Oliveira FISL 10
  • 15. Auto Explain Módulo do Contrib que habilita o explain no log do postgresql automaticamente Pode ser carregado por sessão ou no postgresql.conf pagila=# load ’auto_explain’; LOAD pagila=# set auto_explain.log_min_duration = 2000; SET pagila=# select pg_sleep(3); pg_sleep ------- (1 row) ~~ LOG: duration: 3000.196 ms plan: Result (cost=0.00..0.01 rows=1 width=0) STATEMENT: select pg_sleep(3); Fernando Ike de Oliveira FISL 10
  • 16. Novo tipo de dados: citext No Contrib, módulo com tipo de dados não sensitivo pagila=# CREATE TABLE usuario (nick CITEXT PRIMARY KEY, pass TEXT NOT NULL);NOTA: CREATE TABL CREATE TABLE pagila=# INSERT INTO usuario VALUES (’Ronaldo’, md5(random()::text)); INSERT 0 1 pagila=# SELECT * from usuario WHERE nick = ’ronaldo’; nick | pass ------+----------------------- Ronaldo | 65965ffb9098f448db7982aacd8c747c (1 registro) pagila=# Fernando Ike de Oliveira FISL 10
  • 17. Explain mais legível Explain exibe as colunas em sua saída pagila-# using (film_id); om film_actor join actor using (actor_id) join filmrst_name, last_name, title fro using (film_id); QUERY PLAN -------------------------------------------------------------------------------- Hash Join (cost=85.00..319.83 rows=5462 width=28) (actual time=3.413..39.603 rows=5462 loops Output: actor.first_name, actor.last_name, film.title Hash Cond: (film_actor.actor_id = actor.actor_id) -> Hash Join (cost=78.50..238.22 rows=5462 width=17) (actual time=2.813..24.658 rows=5462 Output: film_actor.actor_id, film.title Hash Cond: (film_actor.film_id = film.film_id) -> Seq Scan on film_actor (cost=0.00..84.62 rows=5462 width=4) (actual time=0.007.. Output: film_actor.actor_id, film_actor.film_id, film_actor.last_update -> Hash (cost=66.00..66.00 rows=1000 width=19) (actual time=2.790..2.790 rows=1000 Output: film.title, film.film_id -> Seq Scan on film (cost=0.00..66.00 rows=1000 width=19) (actual time=0.004. Output: film.title, film.film_id -> Hash (cost=4.00..4.00 rows=200 width=17) (actual time=0.576..0.576 rows=200 loops=1) Output: actor.first_name, actor.last_name, actor.actor_id -> Seq Scan on actor (cost=0.00..4.00 rows=200 width=17) (actual time=0.010..0.271 Output: actor.first_name, actor.last_name, actor.actor_id Total runtime: 46.285 ms (1 registro) Fernando Ike de Oliveira FISL 10
  • 18. With Recursivo Common Table Expression (CTE, Consultas com WITH) Declaração do WITH antes da Consulta Fernando Ike de Oliveira FISL 10
  • 19. Exemplo do WITH em Fibonacci pagila=# WITH recursive Fib (i, j) AS (VALUES (0, 1) UNION ALL SELECT (i + j), (i + j) + j FROM Fib WHERE (i + j) < 100) SELECT i FROM Fib UNION ALL SELECT j FROM Fib ORDER BY i; i --- 0 1 1 2 3 5 8 13 21 34 55 89 (1 registro) pagila=# Fernando Ike de Oliveira FISL 10
  • 20. Antigamente para fazer consulta recursiva SELECT * FROM (select c1.first_name, c1.last_name, c1.store_id, p1.total, (select 1 + count(*) from customer c2 join (select customer_id, sum(amount) as total from only payment group by customer_id) p2 using (customer_id) where c2.store_id = c1.store_id and p2.total > p1.total) as rank from customer c1 join (select customer_id, sum(amount) as total from only payment group by customer_id) p1 using (customer_id)) x WHERE x.rank <= 3 ORDER BY x.store_id, x.rank; Fernando Ike de Oliveira FISL 10
  • 21. Agora com consulta recursiva... ... e com window function pagila=# select * from (with cte as ( select first_name, last_name, store_id, sum(amount) as total from payment join customer using (customer_id) group by first_name, last_name, store_id) select first_name, last_name, store_id, total, rank() over (partition by store_id order by total desc) from cte ) x where rank <= 3; first_name | last_name | store_id | total | rank --------+-------+-------+-----+---- ELEANOR | HUNT | 1 | 216.54 | 1 CLARA | SHAW | 1 | 195.58 | 2 TOMMY | COLLAZO | 1 | 186.62 | 3 KARL | SEAL | 2 | 221.55 | 1 MARION | SNYDER | 2 | 194.61 | 2 RHONDA | KENNEDY | 2 | 194.61 | 2 (1 registro) pagila=# Fernando Ike de Oliveira FISL 10
  • 22. LIMIT na subconsulta pagila=# SELECT title FROM film ORDER BY random() LIMIT (SELECT count(*)/10 FROM film WHERE ra title --------------- SHIP WONDERLAND AMELIE HELLFIGHTERS REDS POCUS LOCK REAR SILENCE KANE BENEATH RUSH GRAPES FURY VILLAIN DESPERATE VANISHING ROCKY DETAILS PACKER FIGHT JAWBREAKER FIDDLER LOST DYNAMITE TARZAN DADDY PITTSBURGH ANACONDA CONFESSIONS WONKA SEA WORDS HUNTER (1 registro) pagila=# Fernando Ike de Oliveira FISL 10
  • 23. Busca parcial e Full Text Search pagila=# select title, description from film where fulltext @@ to_tsquery(’dog:*’) pagila-# except pagila-# select title, description from film where fulltext @@ to_tsquery(’dog’); title | description ---------+---------------------------------------------------------------------------- ARABIA DOGMA | A Touching Epistle of a Madman And a Mad Cow who must Defeat a Student in Nige DOGMA FAMILY | A Brilliant Character Study of a Database Administrator And a Monkey who must (1 registro) pagila=# Fernando Ike de Oliveira FISL 10
  • 24. Comando Table Comando que exibe todas as colunas de uma tabela Em conformidade com padrão ANSI SQL pagila=# table language; language_id | name | last_update ---------+---------------+-------------- 1 | English | 2006-02-15 10:02:19 2 | Italian | 2006-02-15 10:02:19 3 | Japanese | 2006-02-15 10:02:19 4 | Mandarin | 2006-02-15 10:02:19 5 | French | 2006-02-15 10:02:19 6 | German | 2006-02-15 10:02:19 (1 registro) pagila=# Fernando Ike de Oliveira FISL 10
  • 25. Geração de tempo com intervalos Intervalo de tempo gerado pela função generate_series pagila=# select * from generate_series(now() - ’5 minutes’::interval,now(),’50 seconds’:: generate_series -------------------- 2009-06-26 15:26:00.74239-03 2009-06-26 15:26:50.74239-03 2009-06-26 15:27:40.74239-03 2009-06-26 15:28:30.74239-03 2009-06-26 15:29:20.74239-03 2009-06-26 15:30:10.74239-03 2009-06-26 15:31:00.74239-03 (1 registro) pagila=# Fernando Ike de Oliveira FISL 10
  • 26. Edição mais fácil no PSQL ef CREATE FUNCTION add(integer, integer) RETURNS integer AS ’select 1+2;’ LANGUAGE SQL IMMUTABL RETURNS NULL ON NULL INPUT; Fernando Ike de Oliveira FISL 10
  • 27. PSQL e compatibilidade O PSQL tem compatibilidade com todas as versões anteriores do PostgreSQL dos Comandos com barra Fernando Ike de Oliveira FISL 10
  • 28. Pg_Migrator Facilita a migração entre versões do PostgreSQL Opcionalmente não ocupa mais espaço em disco Método de Migração Tempo em minutos dump/restore 300.0 dump with parallel restore 180.0 pg_migrator em modo cópia 44.0 pg_migrator em modo link 0.7 Fernando Ike de Oliveira FISL 10
  • 29. Funcionalidades para novas versões: 8.5 replicação síncrona suporte SE-Linux (SE-Postgres) Hot Standby Fernando Ike de Oliveira FISL 10
  • 30. Referências http://www.postgresql.org/ http://www.pgfoundry.org http://www.postgresql.org/community Fernando Ike de Oliveira FISL 10
  • 31. Conclusão Contatos: fernando.ike@ebc.com.br fernando.ike@gmail.com http://www.midstorm.org/~fike/weblog PGCon Brasil 2009 http://pgcon.postgresql.org.br Fernando Ike de Oliveira FISL 10