Treinamento PostgreSQL - Aula 03 Eduardo Ferreira dos Santos SparkGroup Treinamento e Capacitação em Tecnologia [email protected] eduardosan.com 29 de Maio de 2013 Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 1 / edua 38 Cronograma Semana 1: 27 de Maio a 4 de Junho Administração de Dados Semana 2: 5-11 de Junho Administração de Banco de Dados Semana 3: 13-18 de Junho Alta disponibilidade Semana 4: 19-24 de Junho Performance Tuning Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 2 / edua 38 Sumário 1 Consultas Criando a base de dados Junções (JOIN) 2 Funções e Operadores Operadores de data Tipo inet Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 3 / edua 38 Consultas 1 Consultas Criando a base de dados Junções (JOIN) 2 Funções e Operadores Operadores de data Tipo inet Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 4 / edua 38 Consultas Denindo a base de dados Modelo da base de dados Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 5 / edua 38 Consultas 1 Criando a base de dados Consultas Criando a base de dados Junções (JOIN) 2 Funções e Operadores Operadores de data Tipo inet Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 6 / edua 38 Consultas Criando a base de dados Relembrando a criação da base Listing 1: Cria usuário, banco e SCHEMA P o s t g r e S Q L> c r e a t e u s e r u s u a r i o S h a l l t h e new r o l e b e a s u p e r u s e r ? ( y / n ) n S h a l l t h e new r o l e b e a l l o w e d t o c r e a t e d a t a b a s e s ? ( y / n ) n S h a l l t h e new r o l e b e a l l o w e d t o c r e a t e more new r o l e s ? ( y / n ) n P o s t g r e S Q L> c r e a t e d b −O u s u a r i o CREATE DATABASE P o s t g r e S Q L> p s q l −U u s u a r i o psql (9.1.9) Type " h e l p " f o r primeiro_banco primeiro_banco help . p r i m e i r o _ b a n c o=> CREATE SCHEMA u s r _ e s c o l a ; CREATE SCHEMA p r i m e i r o _ b a n c o=>\q quit Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 7 / edua 38 Consultas Criando a base de dados Permissões Listing 2: Ajusta permissões vim / e t c / p o s t g r e s q l / 9 . 0 / m a i n / pg_hba . c o n f # A seguinte l i n h a : local all postgres ident # Altera para f i c a r assim : local local all postgres primeiro_banco ident usuario trust logo ut # Como root , r e i n i c i e o banco / e t c / i n i t . d/ p o s t g r e s q l su − restart postgres Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 8 / edua 38 Consultas Criando a base de dados Cria estrutura da base Primeiro baixe os arquivos SQL: Estrutura da base: https://seacloud.cc/f/20677b5257/ https://seacloud.cc/f/20677b5257/ Carga inicial de dados: Em seguida execute os arquivos no banco de dados: Listing 3: Cria base P o s t g r e S Q L> p s q l −U u s u a r i o − f c r i a −b a n c o . s q l p r i m e i r o _ b a n c o BEGIN SET p s q l : / tmp / c r i a −b a n c o . s q l : 1 2 : NOTA : CREATE TABLE / PRIMARY KEY á c r i a r í n d i c e í i m p l c i t o " p k _ a l u n o " na t a b e l a " a l u n o " CREATE TABLE p s q l : / tmp / c r i a −b a n c o . s q l : 2 0 : NOTA : CREATE TABLE / PRIMARY KEY á c r i a r í n d i c e í i m p l c i t o " p k _ d i s c i p l i n a " na t a b e l a " d i s c i p l i n a " CREATE TABLE p s q l : / tmp / c r i a −b a n c o . s q l : 2 8 : NOTA : CREATE TABLE / PRIMARY KEY á c r i a r í n d i c e í i m p l c i t o " p k _ a l u n o _ n a _ d i s c i p l i n a " na t a b e l a " a l u n o _ n a _ d i s c i p l i n a " CREATE TABLE p s q l : / tmp / c r i a −b a n c o . s q l : 3 3 : NOTA : CREATE TABLE / PRIMARY KEY á c r i a r í n d i c e í i m p l c i t o " p k _ c u r s o " na t a b e l a " c u r s o " CREATE TABLE p s q l : / tmp / c r i a −b a n c o . s q l : 4 0 : NOTA : CREATE TABLE / PRIMARY KEY á c r i a r í n d i c e í i m p l c i t o " p k _ c o n c e i t o " na t a b e l a " g r a d e _ c o n c e i t o " CREATE TABLE ALTER TABLE COMMIT Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 9 / edua 38 Consultas Criando a base de dados Carga inicial dos dados Listing 4: Alimenta base áííáííáííáííáíí P o s t g r e S Q L> p s q l −U u s u a r i o − f BEGIN SET INSERT 0 1 INSERT 0 1 INSERT 0 1 INSERT 0 1 INSERT 0 1 INSERT 0 1 INSERT 0 1 (..) INSERT 0 1 INSERT 0 1 INSERT 0 1 COMMIT c r i a −b a n c o . s q l primeiro_banco Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 10 / edua 38 Consultas 1 Junções (JOIN) Consultas Criando a base de dados Junções (JOIN) 2 Funções e Operadores Operadores de data Tipo inet Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 11 / edua 38 Consultas Junções (JOIN) Junções (JOIN) Junção de duas tabelas (reais ou derivadas) de acordo com as regras do tipo particular de JOIN: INNER JOIN A tabela resultado contém todos os resultados de ambas as tabelas que satisfazam a condição fornecida; OUTER JOIN A tabela resultado contém todas os resultados de ambas as tabelas, ainda que a condição não seja satisfeita; CROSS JOIN Produto cartesiano dos campos das duas tabelas. Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 12 / edua 38 Consultas Junções (JOIN) INNER JOIN SELECT Listing 5: Primeiro exemplo de INNER JOIN d . cod_disciplina , d . descricao , c . cod_curso , d . cod_disciplina_requisito , c . descricao FROM u s r _ e s c o l a . d i s c i p l i n a d INNER JOIN u s r _ e s c o l a . c u r s o c ON d . cod_curso = c . cod_curso ORDER BY c . cod_curso ; Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 13 / edua 38 Consultas Junções (JOIN) INNER JOIN SELECT Listing 6: Segundo exemplo de INNER JOIN d . descricao , c . cod_curso , c . descricao , a . matricula FROM u s r _ e s c o l a . d i s c i p l i n a d INNER JOIN u s r _ e s c o l a . c u r s o c ON d . cod_curso = c . cod_curso INNER JOIN usr_escola . aluno_na_disciplina cod_disciplina ORDER BY a ON d. = a . cod_disciplina c . cod_curso ; Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 14 / edua 38 Consultas Junções (JOIN) INNER JOIN SELECT Listing 7: Terceiro exemplo de INNER JOIN d . descricao , c . cod_curso , c . descricao , a . matricula , a l . nome FROM u s r _ e s c o l a . d i s c i p l i n a d INNER JOIN u s r _ e s c o l a . c u r s o c ON d . cod_curso = c . cod_curso INNER JOIN usr_escola . aluno_na_disciplina cod_disciplina INNER JOIN a ON d. = a . cod_disciplina usr_escola . aluno al ON al . matricula = a . matricula ORDER BY c . cod_curso ; Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 15 / edua 38 Consultas Junções (JOIN) INNER JOIN SELECT Listing 8: INNER JOIN com ltro d . descricao , c . cod_curso , c . descricao , a . matricula , a l . nome FROM u s r _ e s c o l a . d i s c i p l i n a d INNER JOIN u s r _ e s c o l a . c u r s o c ON d . cod_curso = c . cod_curso INNER JOIN usr_escola . aluno_na_disciplina cod_disciplina INNER JOIN a ON d. = a . cod_disciplina usr_escola . aluno al ON al . matricula = a . matricula WHERE c . cod_curso = 'MAT ' ; Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 16 / edua 38 Consultas Junções (JOIN) Considerações sobre performance 1 Carregue o PGAdmin e execute a consulta no banco de dados; Execute a consulta no modo Analyze; O que foi custoso para a consulta? 1 Ferramenta de administração para bases de dados PostgreSQL: http://www.pgadmin.org/ Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 17 / edua 38 Consultas Junções (JOIN) Considerações sobre performance 1 Carregue o PGAdmin e execute a consulta no banco de dados; Execute a consulta no modo Analyze; O que foi custoso para a consulta? Aplique o ltro utilizando o exemplo 8. O que mudou? 1 Ferramenta de administração para bases de dados PostgreSQL: http://www.pgadmin.org/ Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 17 / edua 38 Consultas Junções (JOIN) Considerações sobre performance 1 Carregue o PGAdmin e execute a consulta no banco de dados; Execute a consulta no modo Analyze; O que foi custoso para a consulta? Aplique o ltro utilizando o exemplo 8. O que mudou? Utilize o comando EXPLAIN ANALYZE; Copie e cole os resultados no site http://explain.depesz.com/ Quais os procedimentos que mais consomem recursos do banco de dados? 1 Ferramenta de administração para bases de dados PostgreSQL: http://www.pgadmin.org/ Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 17 / edua 38 Consultas Junções (JOIN) OUTER JOIN SELECT Listing 9: Exemplo de OUTER JOIN d . cod_disciplina , d . descricao , c . cod_curso , d. cod_disciplina_requisito FROM u s r _ e s c o l a . d i s c i p l i n a d FULL OUTER JOIN u s r _ e s c o l a . c u r s o c ON d . cod_curso = c . cod_curso ; Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 18 / edua 38 Consultas Junções (JOIN) OUTER JOIN SELECT Listing 10: Exemplo de OUTER JOIN com ltro d . cod_disciplina , d . descricao , d . cod_disciplina_requisito , c . cod_curso FROM u s r _ e s c o l a . d i s c i p l i n a d FULL OUTER JOIN u s r _ e s c o l a . c u r s o c ON d . cod_curso = c . cod_curso WHERE c . cod_curso = 'DAN ' ; Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 19 / edua 38 Consultas Junções (JOIN) LEFT OUTER JOIN SELECT Listing 11: Exemplo de LEFT OUTER JOIN d . cod_disciplina , d . descricao , c . cod_curso , d. cod_disciplina_requisito FROM u s r _ e s c o l a . d i s c i p l i n a d LEFT OUTER JOIN u s r _ e s c o l a . c u r s o c ON d . cod_curso = c . cod_curso ; Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 20 / edua 38 Consultas Junções (JOIN) LEFT OUTER JOIN SELECT Listing 12: Exemplo de LEFT OUTER JOIN com ltro d . cod_disciplina , d . descricao , c . cod_curso , d. cod_disciplina_requisito FROM u s r _ e s c o l a . d i s c i p l i n a LEFT JOIN u s r _ e s c o l a . c u r s o d c ON d . cod_curso = c . cod_curso WHERE c . cod_curso = 'DAN ' ; Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 21 / edua 38 Consultas Junções (JOIN) Exercício Considerando o modelo da gura 5, construa uma consulta que traga a lista de alunos e a lista de disciplinas, incluindo os alunos que não estão matriculados em nenhuma disciplina. Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 22 / edua 38 Consultas Junções (JOIN) Solução SELECT Listing 13: Exercício 1 a . matricula AS m1 , a . nome , a l . m a t r i c u l a AS m2 FROM u s r _ e s c o l a . a l u n o a LEFT OUTER JOIN u s r _ e s c o l a . a l u n o _ n a _ d i s c i p l i n a a . matricula = al ON al . matricula ; Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 23 / edua 38 Consultas Junções (JOIN) Exercício Adicione a informação do nome da disciplina ao exemplo anterior Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 24 / edua 38 Consultas Junções (JOIN) Solução SELECT Listing 14: Exercício 2 a . matricula a . nome , AS AS al . matricula m1 , m2 , d . descricao , al . cod_disciplina FROM u s r _ e s c o l a . a l u n o a LEFT OUTER JOIN u s r _ e s c o l a . a l u n o _ n a _ d i s c i p l i n a a . matricula = LEFT OUTER JOIN al . matricula usr_escola . d i s c i p l i n a cod_disciplina d ON al ON al . = d. cod_disciplina Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 25 / edua 38 Consultas Junções (JOIN) Exercício Troque o segundo LEFT OUTER JOIN por INNER JOIN e veja o que acontece. Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 26 / edua 38 Consultas Junções (JOIN) Solução SELECT Listing 15: Exercício 3 a . matricula a . nome , al . matricula AS AS m1 , m2 , d . descricao , al . cod_disciplina FROM u s r _ e s c o l a . a l u n o a LEFT OUTER JOIN u s r _ e s c o l a . a l u n o _ n a _ d i s c i p l i n a a . matricula = INNER JOIN al . matricula usr_escola . d i s c i p l i n a cod_disciplina d ON al ON al . = d. cod_disciplina Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 27 / edua 38 Funções e Operadores 1 Consultas Criando a base de dados Junções (JOIN) 2 Funções e Operadores Operadores de data Tipo inet Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 28 / edua 38 Funções e Operadores Introdução Objetivos: Realizar operações com tipos de dados diferentes; Comparar valores em diferentes formatos; Conversão de dados; Operadores complexos e dados abstratos. Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 29 / edua 38 Funções e Operadores 1 Operadores de data Consultas Criando a base de dados Junções (JOIN) 2 Funções e Operadores Operadores de data Tipo inet Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 30 / edua 38 Funções e Operadores Operadores de data Operadores de data Listing 16: Conversão de dados SELECT c o d _ d i s c i p l i n a , t o _ c h a r ( p e r i o d o , as mes FROM u s r _ e s c o l a . a l u n o _ n a _ d i s c i p l i n a ; 'MM/YYYY ' ) Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 31 / edua 38 Funções e Operadores Operadores de data Operadores de data Listing 17: Operadores de data SELECT c o d _ d i s c i p l i n a , a g e ( p e r i o d o ) as FROM u s r _ e s c o l a . a l u n o _ n a _ d i s c i p l i n a ; mes SELECT c o d _ d i s c i p l i n a , a g e ( now ( ) , p e r i o d o ) as FROM u s r _ e s c o l a . a l u n o _ n a _ d i s c i p l i n a ; mes Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 32 / edua 38 Funções e Operadores Operadores de data Operadores de data Listing 18: Funções de data SELECT c l o c k _ t i m e s t a m p ( ) , current_date , current_timestamp , localtime , localtimestamp , now ( ) , statement_timestamp ( ) , timeofday () , transaction_timestamp () ; Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 33 / edua 38 Funções e Operadores 1 Tipo inet Consultas Criando a base de dados Junções (JOIN) 2 Funções e Operadores Operadores de data Tipo inet Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 34 / edua 38 Funções e Operadores Tipo inet Adiciona tipo Listing 19: Insere tipo inet BEGIN ; ALTER TABLE usr_escola . aluno inet ; ADD COLUMN e n d e r e c o _ i p usr_escola . aluno endereco_ip = ' 192.168.1.1 ' WHERE m a t r i c u l a = ' 1 ' ; UPDATE SET usr_escola . aluno endereco_ip = ' 192.168.1.2 ' WHERE m a t r i c u l a = ' 2 ' ; UPDATE SET usr_escola . aluno endereco_ip = ' 192.168.1.3 ' WHERE m a t r i c u l a = ' 3 ' ; UPDATE SET usr_escola . aluno endereco_ip = ' 192.168.1.100 ' WHERE m a t r i c u l a = ' 4 ' ; UPDATE SET usr_escola . aluno endereco_ip = ' 192.168.2.1 ' matricula = '5 ' ; UPDATE SET WHERE END ; Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 35 / edua 38 Funções e Operadores Tipo inet Funções SELECT Listing 20: Funções básicas abbrev ( endereco_ip ) , broadcast ( endereco_ip ) , f a m i l y ( endereco_ip ) , host ( endereco_ip ) , netmask ( endereco_ip ) FROM usr_escola . aluno ; Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 36 / edua 38 Funções e Operadores Tipo inet Operadores SELECT Listing 21: Operadores para endereço IP matricula , nome FROM u s r _ e s c o l a . a l u n o WHERE e n d e r e c o _ i p = '192.168.1.1 ' : : i n e t ; SELECT matricula , nome FROM u s r _ e s c o l a . a l u n o WHERE e n d e r e c o _ i p >= '192.168.2.1 ' : : i n e t ; SELECT matricula , nome FROM u s r _ e s c o l a . a l u n o WHERE e n d e r e c o _ i p < '192.168.2.1 ' : : i n e t ; Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 37 / edua 38 Funções e Operadores Tipo inet Contato Eduardo Ferreira dos Santos Sparkgroup Lightbase Consultoria em Software Público [email protected] [email protected] www.postgresql.org.br www.eduardosan.com +55 61 3347-1949 Eduardo Ferreira dos Santos (SparkGroup Treinamento Treinamento ePostgreSQL Capacitação- Aula em Tecnologia 03 [email protected] 29 de Maio de 2013 38 / edua 38