Your SlideShare is downloading. ×
PostgreSQL 8.4
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

PostgreSQL 8.4

1,317
views

Published on

Apresentação do PostgreSQL 8.4

Apresentação do PostgreSQL 8.4

Published in: Technology, Business

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,317
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
44
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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