postgresql 8.4

31
PostgreSQL 8.4 Fernando Ike de Oliveira Empresa Brasil de Comunicação FISL 10 Fernando Ike de Oliveira FISL 10

Upload: fernando-ike

Post on 27-Jun-2015

1.385 views

Category:

Technology


0 download

DESCRIPTION

Apresentação do PostgreSQL 8.4

TRANSCRIPT

Page 1: PostgreSQL 8.4

PostgreSQL 8.4

Fernando Ike de Oliveira

Empresa Brasil de Comunicação

FISL 10

Fernando Ike de Oliveira FISL 10

Page 2: PostgreSQL 8.4

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

Page 3: PostgreSQL 8.4

Evolução

Fernando Ike de Oliveira FISL 10

Page 4: PostgreSQL 8.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

Page 5: PostgreSQL 8.4

Visibility Maps

Fim da configuração do FSM no postgresql.conf

Na área de armazenamento é criado um arquivo porrelação com sufixo _vm

O VM é um mapeamento indicativo de quais tuplas estãovisíveis ppara as transações e quais não precisam dovacuum

redução de consumo de processamento e I/O

Fernando Ike de Oliveira FISL 10

Page 6: PostgreSQL 8.4

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

Page 7: PostgreSQL 8.4

Algumas coisas mais de Performance...

pg_restore com múltiplos processos

Redução da frequência de I/O nas informações deestatísticas

stats_temp_directory: indica um diretório que ele vaiescrever o arquivo (utilizar em memória)

Algoritmo Hash foi reescrito

Novos métodos de Join (anti e semi)

Fernando Ike de Oliveira FISL 10

Page 8: PostgreSQL 8.4

Free Space Map

Nova implamentação do Free Space MapNão usa mais a shared memory, agora usa o disco

Remoção do parâmetro max_fsm_pages dopostgresql.confRemoção do parâmetro max_fsm_relations dopostgresql.conf

Adicionado no postgresql.conf ovacuum_freeze_table_age

ignora o visibility map

Fernando Ike de Oliveira FISL 10

Page 9: PostgreSQL 8.4

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

Page 10: PostgreSQL 8.4

Privilégio por coluna

Permite que criar ACL por coluna

pagila=# CREATE ROLE fulano WITH LOGIN ENCRYPTED PASSWORD ’fulano’;CREATE ROLEpagila=# grant select (first_name, last_name) on actor_in fo to fulano;GRANTpagila=# SET SESSION AUTHORIZATION fulano;SETpagila=> select * from actor_info;ERRO: permissão negada para relação actor_infopagila=> select first_name, last_name from actor_info lim it 2;

first_name | last_name--------+-------

PENELOPE | GUINESSNICK | WAHLBERG

(1 registro)pagila=> \z actor_info

Privilégios de acessoEsquema | Nome | Tipo | Privilégios de acesso | Column access p rivileges

------+--------+----+---------------+-------------- ---public | actor_info | view | | first_name:

: fulano=r/postgres: last_name:: fulano=r/postgres

(1 registro)

pagila=>

Fernando Ike de Oliveira FISL 10

Page 11: PostgreSQL 8.4

Banco de dados com localização diferentes

Permite criar LC_COLLATE diferente do instalado porpadrã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 DATABASEpagila=# ł

Lista dos bancos de dadosNome | 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/postgrestemplate1 | postgres | UTF8 | pt_BR.UTF-8 | pt_BR.UTF-8 | =c/ postgres

: postgres=CTc/postgres(1 registro)

pagila=#

Fernando Ike de Oliveira FISL 10

Page 12: PostgreSQL 8.4

Autenticação

Suporte a autenticação com certificado SSL

Fernando Ike de Oliveira FISL 10

Page 13: PostgreSQL 8.4

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) retur ns 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_c atalog.||)(EXTRACT(MONTH FROM $1) + 1) operator(pg_catalog.||) ’-01 ’)::date -INTERVAL ’1 day’)::date END $$;

CREATE FUNCTIONpagila=#

Fernando Ike de Oliveira FISL 10

Page 14: PostgreSQL 8.4

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_ti me-----+--------+-----------+-----+--------+-------

17841 | public | fancy_last_day | 12 | 6 | 6(1 registro)

pagila=#

Fernando Ike de Oliveira FISL 10

Page 15: PostgreSQL 8.4

Auto Explain

Módulo do Contrib que habilita o explain no log dopostgresql automaticamente

Pode ser carregado por sessão ou no postgresql.conf

pagila=# load ’auto_explain’;LOADpagila=# set auto_explain.log_min_duration = 2000;SETpagila=# 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

Page 16: PostgreSQL 8.4

Novo tipo de dados: citext

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

pagila=# CREATE TABLE usuario (nick CITEXT PRIMARY KEY, pas s TEXT NOT NULL);NOTA: CREATE TABLECREATE TABLEpagila=# INSERT INTO usuario VALUES (’Ronaldo’, md5(rando m()::text));INSERT 0 1pagila=# SELECT * from usuario WHERE nick = ’ronaldo’;

nick | pass------+-----------------------

Ronaldo | 65965ffb9098f448db7982aacd8c747c(1 registro)

pagila=#

Fernando Ike de Oliveira FISL 10

Page 17: PostgreSQL 8.4

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_nam e, last_name, title frousing (film_id);

QUERY PLAN--------------------------------------------------- -----------------------------

Hash Join (cost=85.00..319.83 rows=5462 width=28) (actua l time=3.413..39.603 rows=5462 loops=1)Output: actor.first_name, actor.last_name, film.titleHash Cond: (film_actor.actor_id = actor.actor_id)-> Hash Join (cost=78.50..238.22 rows=5462 width=17) (act ual time=2.813..24.658 rows=5462

Output: film_actor.actor_id, film.titleHash Cond: (film_actor.film_id = film.film_id)-> Seq Scan on film_actor (cost=0.00..84.62 rows=5462 widt h=4) (actual time=0.007..6.952

Output: film_actor.actor_id, film_actor.film_id, film_ actor.last_update-> Hash (cost=66.00..66.00 rows=1000 width=19) (actual ti me=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..1.407

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) (a ctual time=0.010..0.271

Output: actor.first_name, actor.last_name, actor.actor _idTotal runtime: 46.285 ms

(1 registro)

Fernando Ike de Oliveira FISL 10

Page 18: PostgreSQL 8.4

With Recursivo

Common Table Expression (CTE, Consultas com WITH)

Declaração do WITH antes da Consulta

Fernando Ike de Oliveira FISL 10

Page 19: PostgreSQL 8.4

Exemplo do WITH em Fibonacci

pagila=# WITH recursive Fib (i, j) AS (VALUES (0, 1) UNION ALLSELECT (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---

0112358

1321345589

(1 registro)pagila=#

Fernando Ike de Oliveira FISL 10

Page 20: PostgreSQL 8.4

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 paymen t group bycustomer_id) p2 using (customer_id) where c2.store_id =c1.store_id and p2.total > p1.total) as rank from customer c 1 join(select customer_id, sum(amount) as total from only paymen tgroup by customer_id) p1 using (customer_id)) x WHERE x.ran k <=3 ORDER BY x.store_id, x.rank;

Fernando Ike de Oliveira FISL 10

Page 21: PostgreSQL 8.4

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 u sing

(customer_id) group by first_name, last_name, store_id) s electfirst_name, last_name, store_id, total, rank() over (part ition bystore_id order by total desc) from cte ) x where rank <= 3;

first_name | last_name | store_id | total | rank--------+-------+-------+-----+----

ELEANOR | HUNT | 1 | 216.54 | 1CLARA | SHAW | 1 | 195.58 | 2TOMMY | COLLAZO | 1 | 186.62 | 3KARL | SEAL | 2 | 221.55 | 1MARION | SNYDER | 2 | 194.61 | 2RHONDA | KENNEDY | 2 | 194.61 | 2

(1 registro)

pagila=#

Fernando Ike de Oliveira FISL 10

Page 22: PostgreSQL 8.4

LIMIT na subconsulta

pagila=# SELECT title FROM film ORDER BY random() LIMIT (SEL ECT count( * )/10 FROM film WHERE ratingtitle

---------------SHIP WONDERLANDAMELIE HELLFIGHTERSREDS POCUSLOCK REARSILENCE KANEBENEATH RUSHGRAPES FURYVILLAIN DESPERATEVANISHING ROCKYDETAILS PACKERFIGHT JAWBREAKERFIDDLER LOSTDYNAMITE TARZANDADDY PITTSBURGHANACONDA CONFESSIONSWONKA SEAWORDS HUNTER

(1 registro)

pagila=#

Fernando Ike de Oliveira FISL 10

Page 23: PostgreSQL 8.4

Busca parcial e Full Text Search

pagila=# select title, description from film where fulltex t @@ to_tsquery(’dog: * ’)pagila-# exceptpagila-# select title, description from film where fulltex t @@ to_tsquery(’dog’);

title | description---------+----------------------------------------- -----------------------------------

ARABIA DOGMA | A Touching Epistle of a Madman And a Mad Cow who m ust Defeat a Student in NigeriaDOGMA FAMILY | A Brilliant Character Study of a Database Admi nistrator And a Monkey who must

(1 registro)pagila=#

Fernando Ike de Oliveira FISL 10

Page 24: PostgreSQL 8.4

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:192 | Italian | 2006-02-15 10:02:193 | Japanese | 2006-02-15 10:02:194 | Mandarin | 2006-02-15 10:02:195 | French | 2006-02-15 10:02:196 | German | 2006-02-15 10:02:19

(1 registro)

pagila=#

Fernando Ike de Oliveira FISL 10

Page 25: PostgreSQL 8.4

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’::interval);generate_series

--------------------2009-06-26 15:26:00.74239-032009-06-26 15:26:50.74239-032009-06-26 15:27:40.74239-032009-06-26 15:28:30.74239-032009-06-26 15:29:20.74239-032009-06-26 15:30:10.74239-032009-06-26 15:31:00.74239-03

(1 registro)pagila=#

Fernando Ike de Oliveira FISL 10

Page 26: PostgreSQL 8.4

Edição mais fácil no PSQL

ef

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

Fernando Ike de Oliveira FISL 10

Page 27: PostgreSQL 8.4

PSQL e compatibilidade

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

Fernando Ike de Oliveira FISL 10

Page 28: PostgreSQL 8.4

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 minutosdump/restore 300.0

dump with parallel restore 180.0pg_migrator em modo cópia 44.0pg_migrator em modo link 0.7

Fernando Ike de Oliveira FISL 10

Page 29: PostgreSQL 8.4

Funcionalidades para novas versões:

8.5replicação síncrona

suporte SE-Linux (SE-Postgres)

Hot Standby

Fernando Ike de Oliveira FISL 10

Page 30: PostgreSQL 8.4

Referências

http://www.postgresql.org/

http://www.pgfoundry.org

http://www.postgresql.org/community

Fernando Ike de Oliveira FISL 10

Page 31: PostgreSQL 8.4

Conclusão

Contatos:[email protected]

[email protected]

http://www.midstorm.org/~fike/weblog

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

Fernando Ike de Oliveira FISL 10