SlideShare uma empresa Scribd logo
PostgreSQL 8.4




    Diogo Biazus
 diogob@gmail.com
PostgreSQL 7.X
●
    Totalmente ACID
●
    MVCC
●
    Tipos e operadores customizáveis
●
    Diversas linguagens procedurais
●
    Hot backup
●
    Código aberto (BSD)
●
    Facilidade de extensão
●
    PL/pgSQL, PL/Python, PL/Perl,
    PL/Java, PL/PHP, PL/Ruby, etc.
PostgreSQL 8.0
●
    Win32
●
    Pontos de salvamento
●
    Recuperação a partir de logs
●
    Tablespaces
●
    Tratamento de erro em PL/pgSQL
●
    Otimizações
PostgreSQL 8.3
●
    Warm-standby
●
    Commit em duas etapas
●
    Consultas RETURNING
●
    FTS integrado ao banco
●
    XML integrado
●
    Tipos UUID e ENUM
●
    Integração LDAP
PostgreSQL 8.4 e Avante
●
    8.4
          –   Window functions
          –   CTE e recursividade
          –   Permissão de colunas
●
    Futuro
          –   Hot-standby (rep. assíncrona nativa)
          –   Replicação síncrona nativa
          –   Bitmap index no disco
          –   SEPostgres
Portes e pacotes
●
    Disponibilidade do fonte e de pacotes
    para:
    –   *BSD
    –   Linux
         ●
             pacotes em .rpm e .deb.
    –   Windows
         ●
             Pacotes msi (a partir da 8.0)
Instalando o servidor no Linux
●
    Debian
    –   apt-get install postgresql-8.3
●
    Compilação simples
    –   Fazer download do fontes em:
        http://www.postgresql.org/ftp/source/
    –   Descompactar
    –   ./configure
    –   make install
Instalando o servidor no Linux
●
    Se não for através do sistema de
    pacotes deve-se iniciar o agrupamento
    com o initdb
●
    É necessário criar a pl/pgsql nos
    bancos em que ela for utilizada
●
    Para instalar módulos do contrib basta
    instalar o pacote postgresql-contrib (se
    for usado sistema de pacotes) ou
    entrar no diretório contrib
    correspondente e digitar make install
Instalando o servidor no Linux
●
    initdb
    –   Usar o flag --locale
    –   O diretório deve pertencer ao usuário que
        vai rodar o banco. Máscara de permissão
        devem ser 700
    –   Deve ser executado com o usuário que vai
        rodar o banco
    –   O primeiro usuário do banco terá o mesmo
        nome do usuário do sistema que executou
        o initdb
Instalando no Windows
●
    Fazer o download do msi
●
    Descompactar
●
    Iniciar o instalador
Instalando no Windows
●
    Seleção de idioma do instalador
Instalando no Windows
●
    Seleção de componentes
Instalando no Windows
●
    Configuração de serviço
Instalando no Windows
●
    initdb –locale=pt_BR -D diretorio
Instalando no Windows
●
    createlang 'plpgsql' template1
Instalando no Windows
●
    Instalando módulos do contrib
Configurações básicas
●
    Arquivos dentro do diretório de dados
●
    pg_hba
    –   configuração de como os hosts devem se
        autenticar
●
    postgresql.conf
    –   demais configurações do banco
Configurações básicas
●
    pg_hba
    –   Regras de como autenticar, lidas
        sequencialmente do inicio ao fim do arquivo.
    –   Tipos de autenticação:
         ●
             trust, reject, password, md5, crypt, krb4, krb5,
             ident, pam
    –   Ex.:
    Tipo        BD    Usuario IP/Rede        Método
    local       all   all                    ident sameuser
    host        all   all     127.0.0.1/32 md5
Configurações básicas
●
    postgresql.conf
    –   listen_addresses = '*'
         ●
             O banco escuta em todas interfaces de rede
    –   max_connections = 100
         ●
             Máximo de conexões concorrentes
Acessando o banco
●
    psql template1 postgres
    –   comandos do psql:
         ●
             l – lista bancos de dados
         ●
             c bd – conecta no banco bd
         ●
             dt – lista relações
         ●
             i – executa arquivo contendo comandos sql
         ●
             ? – mostra help do psql
         ●
             h – mostra referência do SQL
         ●
             h comando – mostra referência do comando
SQL Básico
●
    Nomes
    –   Devem ser auto-explicativos
    –   “ ” Para nomes de objetos
    –   ' ' Para literais
SQL Básico
●
    DDL
    CREATE DATABASE nome
      [ [ WITH ] [ OWNER [=] dono ]
          [ TEMPLATE [=] modelo ]
          [ ENCODING [=] codificação ]
          [ TABLESPACE [=] tablespace ] ]


    DROP DATABASE nome
SQL Básico
●
    DDL
    CREATE [ TEMPORARY ] TABLE nome_tabela (
        { nomecoluna tipo [ DEFAULT expressão ] }
        [, ... ]
    )
    [ WITH OIDS | WITHOUT OIDS ]
    [ TABLESPACE tablespace ]


    DROP TABLE nome [ CASCADE | RESTRICT ]
SQL Básico
●
    DDL
    GRANT permissao ON objeto TO usuario
     [ WITH GRANT OPTION ]


    REVOKE permissao ON objeto FROM usuario
SQL Básico
●
    CREATE DATABASE minicursos;
●
    CREATE TABLE instrutores
    (
        id_instrutor serial PRIMARY KEY,
        nome varchar(100) NOT NULL
        );
SQL Básico
●
    CREATE TABLE cursos
    (
        id_curso serial PRIMARY KEY,
        id_instrutor int REFERENCES instrutores,
        nome varchar(100) NOT NULL
        );
SQL Básico
●
    DML
    SELECT [ ALL | DISTINCT ]
      * | expressão [ AS nome ] [, ...]
      [ FROM relacao [, ...] ]
      [ WHERE condição ]
      [ GROUP BY expressão [, ...] ]
      [ HAVING condição [, ...] ]
      [ ORDER BY expressão [ ASC | DESC |
      [ LIMIT { quantidade | ALL } ]
      [ OFFSET inicio ]
SQL Básico
●
    DML
    INSERT INTO tabela [ ( coluna [, ...] ) ]
     {
     DEFAULT VALUES
     | VALUES ( { expressão | DEFAULT } [, ...] )
     | consulta
     }
SQL Básico
●
    INSERT INTO instrutores VALUES
    (DEFAULT, 'Diogo Biazus');
●
    INSERT INTO cursos VALUES (DEFAULT,
    1, 'Mini-curso de PostgreSQL');
SQL Básico
●
    SELECT * FROM cursos;
●
    SELECT * FROM instrutores;
●
    SELECT * FROM cursos JOIN instrutores
    USING (id_instrutor);
SQL Básico
●
    DML
    UPDATE tabela SET coluna = { expressão |
     DEFAULT } [, ...]
     [ WHERE condição ]
SQL Básico
●
    DML
    DELETE FROM tabela [ WHERE condição ]
SQL Básico
●
    DCL
    BEGIN
    COMMIT
    SAVEPOINT nome
    ROLLBACK TO [ SAVEPOINT ] nome
    ROLLBACK
SQL Básico
●
    BEGIN;
●
    UPDATE cursos SET nome = 'teste';
●
    SELECT * FROM cursos;
●
    SAVEPOINT atualiza;
●
    DELETE FROM cursos;
●
    SELECT * FROM cursos;
●
    ROLLBACK TO atualiza;
●
    SELECT * FROM cursos;
●
    ROLLBACK;
●
    SELECT * FROM cursos;
Manutenção básica
●
    VACUUM
    –   Remove versões antigas de registros
    –   Deve ser agendado no mínimo diariamente se o
        autovacuum for desabilitado
    –   ANALYZE para atualizar estatísticas
Manutenção básica
●
    Backups
    –   Podem ser feitos com o banco no ar
    –   pg_dump
         ●
             Formatos:
             Plain, Custom e Tar
              –
    –   pg_restore
         ●
             Pode-se usar listas para restauração
Tablespaces
●
    Área de dados separada fisicamente
●
    CREATE TABLESPACE nome [ OWNER
    dono ] LOCATION 'diretorio'
Funções em PL/pgSQL
●
    Porque PL/pgSQL?
●
    Ela é bonita? Não.
●
    Ela é OO? Não.
●
    Ela é popular? Não.
●
    Mesmo assim ela é ótima no que faz!
Funções em PL/pgSQL
CREATE FUNCTION primeira_funcao() RETURNS
 VOID AS
'
BEGIN
RETURN;
END;
' LANGUAGE 'plpgsql';


DROP FUNCTION primeira_funcao();
Funções em PL/pgSQL
●
    Estrutura básica
[DECLARE
nome_da_variável       tipo;
...
]
BEGIN
comandos;
END;
Funções em PL/pgSQL
CREATE OR REPLACE FUNCTION primeira_funcao()
 RETURNS VOID AS
$body$
BEGIN
RAISE NOTICE 'Minha primeira rotina em PL/pgSQL';
RETURN;
END;
$body$
LANGUAGE 'plpgsql';
Funções em PL/pgSQL
●
    Declarando variáveis:
DECLARE
numero int4 NOT NULL DEFAULT 10;
●
    Atribuindo valores:
numero := 15;
Funções em PL/pgSQL
●
    Estruturas de controle:
    –   IF ... THEN ... ELSIF ... THEN ... ELSE ... END
        IF;
    –   FOR ... LOOP END LOOP;
    –   LOOP ... END LOOP;
    –   WHILE ... LOOP ... END LOOP;
Funções em PL/pgSQL
●
    Executando SQL:
CREATE OR REPLACE FUNCTION exclui_cliente(pid_cliente int4)
  RETURNS int4 AS
$body$
DECLARE
vLinhas int4 DEFAULT 0;
BEGIN
DELETE FROM clientes WHERE id_cliente = pid_cliente;
GET DIAGNOSTICS vLinhas = ROW_COUNT;
RETURN vLinhas;
END;
$body$ LANGUAGE 'plpgsql';
Domínios
●
    Podemos fazer validações mais
    complexas
       –   CPF, CNPJ, email, dependência de
            arquivos, etc...
●
    E criar domínios para validar de forma
    consistente
Domínios
CREATE OR REPLACE FUNCTION valida(p1 varchar)
RETURNS boolean AS $$
BEGIN
 RETURN (lower(p1) IN ('a', 'b', 'ab', 'o'));
END;
$$ LANGUAGE plpgsql;
Domínios
CREATE DOMAIN tipo_sanguineo AS varchar
CHECK(valida(VALUE));


CREATE TABLE pessoa
(
     nome varchar PRIMARY KEY,
     sangue tipo_sanguineo NOT NULL
);
Domínios
 INSERT INTO pessoa (nome, sangue)
 VALUES ('Diogo', 'm');


 INSERT INTO pessoa (nome, sangue)
 VALUES ('Diogo', 'm');
Gatilhos em PL/pgSQL
●
    Tipo de retorno TRIGGER
●
    Nível de linha e nível de comando
●
    Variáveis para nível de linha:
    –   NEW
    –   OLD
    –   TG_OP
    –   TG_WHEN
Gatilhos em PL/pgSQL
CREATE TRIGGER nome { BEFORE |
 AFTER } { evento [ OR ... ] }
  ON tabela [ FOR [ EACH ] { ROW |
 STATEMENT } ]
  EXECUTE PROCEDURE
 funcao( argumentos )
Gatilhos em PL/pgSQL
CREATE TABLE usuarios
(
nome varchar(30) PRIMARY KEY,
senha char(32)
);
Gatilhos em PL/pgSQL
CREATE FUNCTION md5_senha() RETURNS
 TRIGGER AS $body$
BEGIN
  NEW.senha := md5(NEW.senha);
  RETURN NEW;
END;
$body$
LANGUAGE 'plpgsql';
Gatilhos em PL/pgSQL
CREATE TRIGGER md5_senha BEFORE INSERT ON
 usuarios FOR EACH ROW EXECUTE PROCEDURE
 md5_senha();
INSERT INTO usuarios VALUES ('usuario', 'senha');
SELECT * FROM usuarios;
Dicas de segurança
●
    O objetivo é minimizar os danos
●
    Sempre “engaiole” o seu usuário
●
    Conheça bem os comandos GRANT e REVOKE
●
    Use funções “SECURITY DEFINER” como interface
    para operações críticas
●
    Crie usuários comuns para criação e administração
    de bancos
●
    Crie usuários comuns para operação de bancos
●
    Usuários diferentes para bancos diferentes
Extensões
●
    Funções em C
●
    DBLink: Consultas remotas
●
    DBI-Link: Consultas em fontes DBI
●
    Tsearch: Indexação de textos no PgSQL
●
    PgXML: Manipulação com Xquery
●
    PostGis: Dados geográficos
Replicação
●
    Slony I
●
    PGPool II
●
    Warm-standby (hot-standby na 8.5)
●
    Skytools
Referências

●
    Sobre o PgSQL
    –   http://www.postgresql.org.br/
    –   http://www.postgresql.org/

Mais conteúdo relacionado

Mais procurados

Funcionalidades Oracle
Funcionalidades OracleFuncionalidades Oracle
Funcionalidades Oracle
harlycarreiro
 
Banco de dados aula 4
Banco de dados aula 4Banco de dados aula 4
Banco de dados aula 4Ed W. Jr
 
Aula2 - SQL
Aula2 - SQLAula2 - SQL
Aula2 - SQL
Rafael Albani
 
Inúmeras Razões para Migrar de Oracle 10g para 11g
Inúmeras Razões para Migrar de Oracle 10g para 11g Inúmeras Razões para Migrar de Oracle 10g para 11g
Inúmeras Razões para Migrar de Oracle 10g para 11g
TI Infnet
 
Mysql for IBMers
Mysql for IBMersMysql for IBMers
Mysql for IBMers
Wagner Bianchi
 
Python e bancos NoSQL
Python e bancos NoSQLPython e bancos NoSQL
Python e bancos NoSQL
Marinho Brandão
 
Apresentação Oracle SGBD
Apresentação Oracle SGBDApresentação Oracle SGBD
Apresentação Oracle SGBD
Denis Vieira
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open source
Rodrigo Aurélio
 
Otimização MySQL
Otimização MySQLOtimização MySQL
Otimização MySQL
Elton Minetto
 
Alto desempenho com banco de dados MySQL
Alto desempenho com banco de dados MySQLAlto desempenho com banco de dados MySQL
Alto desempenho com banco de dados MySQL
Jonas Silveira
 
Banco de dados oracle
Banco de dados oracleBanco de dados oracle
Banco de dados oracle
Eduardo Lopes
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
Ysmaylyka Macedo
 
Por que PostgreSQL?
Por que PostgreSQL?Por que PostgreSQL?
Por que PostgreSQL?
Juliano Atanazio
 
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
 
Melhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySqlMelhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySql
Helder Lopes
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
antonio sérgio nogueira
 
PGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBAPGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBA
Dextra
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotation
eduardo dias
 
Modulo 15 PSI
Modulo 15 PSIModulo 15 PSI
Modulo 15 PSI
Luis Ferreira
 

Mais procurados (20)

Funcionalidades Oracle
Funcionalidades OracleFuncionalidades Oracle
Funcionalidades Oracle
 
Banco de dados aula 4
Banco de dados aula 4Banco de dados aula 4
Banco de dados aula 4
 
Aula2 - SQL
Aula2 - SQLAula2 - SQL
Aula2 - SQL
 
Inúmeras Razões para Migrar de Oracle 10g para 11g
Inúmeras Razões para Migrar de Oracle 10g para 11g Inúmeras Razões para Migrar de Oracle 10g para 11g
Inúmeras Razões para Migrar de Oracle 10g para 11g
 
Mysql for IBMers
Mysql for IBMersMysql for IBMers
Mysql for IBMers
 
Python e bancos NoSQL
Python e bancos NoSQLPython e bancos NoSQL
Python e bancos NoSQL
 
Apresentação Oracle SGBD
Apresentação Oracle SGBDApresentação Oracle SGBD
Apresentação Oracle SGBD
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open source
 
Otimização MySQL
Otimização MySQLOtimização MySQL
Otimização MySQL
 
Alto desempenho com banco de dados MySQL
Alto desempenho com banco de dados MySQLAlto desempenho com banco de dados MySQL
Alto desempenho com banco de dados MySQL
 
Banco de dados oracle
Banco de dados oracleBanco de dados oracle
Banco de dados oracle
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
Por que PostgreSQL?
Por que PostgreSQL?Por que PostgreSQL?
Por que PostgreSQL?
 
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
 
Melhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySqlMelhorando o desempenho de suas consultas no MySql
Melhorando o desempenho de suas consultas no MySql
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
 
PGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBAPGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBA
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotation
 
Modulo 15 PSI
Modulo 15 PSIModulo 15 PSI
Modulo 15 PSI
 

Destaque

Novidades da versão 9.0 do PostgreSQL
Novidades da versão 9.0 do PostgreSQLNovidades da versão 9.0 do PostgreSQL
Novidades da versão 9.0 do PostgreSQL
Matheus Espanhol
 
Conceitos E Aplicações
Conceitos E AplicaçõesConceitos E Aplicações
Conceitos E Aplicações
Fabio Telles Rodriguez
 
PostgreSQL: Performance Tuning
PostgreSQL: Performance TuningPostgreSQL: Performance Tuning
PostgreSQL: Performance Tuning
Fernando Ike
 
PostgreSQL
PostgreSQLPostgreSQL
Cluster e replicação em banco de dados
Cluster e replicação em banco de dadosCluster e replicação em banco de dados
Cluster e replicação em banco de dadosSuissa
 

Destaque (7)

Novidades da versão 9.0 do PostgreSQL
Novidades da versão 9.0 do PostgreSQLNovidades da versão 9.0 do PostgreSQL
Novidades da versão 9.0 do PostgreSQL
 
Conceitos E Aplicações
Conceitos E AplicaçõesConceitos E Aplicações
Conceitos E Aplicações
 
PostgreSQL: Performance Tuning
PostgreSQL: Performance TuningPostgreSQL: Performance Tuning
PostgreSQL: Performance Tuning
 
Postgre Sql
Postgre SqlPostgre Sql
Postgre Sql
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
Modelos de Banco de dados e SGBDS
Modelos de Banco de dados e SGBDSModelos de Banco de dados e SGBDS
Modelos de Banco de dados e SGBDS
 
Cluster e replicação em banco de dados
Cluster e replicação em banco de dadosCluster e replicação em banco de dados
Cluster e replicação em banco de dados
 

Semelhante a Minicurso PostgreSQL

PGDay Campinas 2013 - PL/pg…ETL – Transformação de dados para DW e BI usando ...
PGDay Campinas 2013 - PL/pg…ETL – Transformação de dados para DW e BI usando ...PGDay Campinas 2013 - PL/pg…ETL – Transformação de dados para DW e BI usando ...
PGDay Campinas 2013 - PL/pg…ETL – Transformação de dados para DW e BI usando ...
PGDay Campinas
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
Fabrízio Mello
 
PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro Vieira
Pedro Fernandes Vieira
 
Consegi 2011: Puppet
Consegi 2011: PuppetConsegi 2011: Puppet
Consegi 2011: Puppet
Jose Augusto Carvalho
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Jorge Luís Gregório
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
Rildo Pragana
 
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
 
Maonamassa Pga
Maonamassa PgaMaonamassa Pga
Maonamassa Pga
Michael Macêdo
 
PostgreSQL Dump e Restor - O básico
PostgreSQL Dump e Restor - O básicoPostgreSQL Dump e Restor - O básico
PostgreSQL Dump e Restor - O básico
Bruno Emanuel Silva
 
Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Fabrízio Mello
 
Oracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTIOracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTI
Fernando Ike
 
Python 04
Python 04Python 04
Python 04
Bruno Catão
 
Utilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primárioUtilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primárioCarlos Melo
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Dickson S. Guedes
 
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
Juliano Atanazio
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
Thiago Cifani
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Arlindo Santos
 
Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQL
Raul Oliveira
 

Semelhante a Minicurso PostgreSQL (20)

PGDay Campinas 2013 - PL/pg…ETL – Transformação de dados para DW e BI usando ...
PGDay Campinas 2013 - PL/pg…ETL – Transformação de dados para DW e BI usando ...PGDay Campinas 2013 - PL/pg…ETL – Transformação de dados para DW e BI usando ...
PGDay Campinas 2013 - PL/pg…ETL – Transformação de dados para DW e BI usando ...
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
Bd sql (1)
Bd sql (1)Bd sql (1)
Bd sql (1)
 
PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro Vieira
 
Consegi 2011: Puppet
Consegi 2011: PuppetConsegi 2011: Puppet
Consegi 2011: Puppet
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Apresentação interbase (atualização 2)
Apresentação interbase (atualização 2)Apresentação interbase (atualização 2)
Apresentação interbase (atualização 2)
 
Maonamassa Pga
Maonamassa PgaMaonamassa Pga
Maonamassa Pga
 
PostgreSQL Dump e Restor - O básico
PostgreSQL Dump e Restor - O básicoPostgreSQL Dump e Restor - O básico
PostgreSQL Dump e Restor - O básico
 
Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010
 
Oracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTIOracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTI
 
Python 04
Python 04Python 04
Python 04
 
Utilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primárioUtilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primário
 
Implementação de
Implementação de Implementação de
Implementação de
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
 
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
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQL
 

Mais de Diogo Biazus

Utilizando Rails e PostgreSQL
Utilizando Rails e PostgreSQLUtilizando Rails e PostgreSQL
Utilizando Rails e PostgreSQL
Diogo Biazus
 
Hercules
HerculesHercules
Hercules
Diogo Biazus
 
Collectd
CollectdCollectd
Collectd
Diogo Biazus
 
Testes Unitarios Com PostgreSQL
Testes Unitarios Com PostgreSQLTestes Unitarios Com PostgreSQL
Testes Unitarios Com PostgreSQL
Diogo Biazus
 
PostgreSQL Ha
PostgreSQL HaPostgreSQL Ha
PostgreSQL Ha
Diogo Biazus
 
Arquivos No Banco
Arquivos No BancoArquivos No Banco
Arquivos No Banco
Diogo Biazus
 
Git
GitGit

Mais de Diogo Biazus (7)

Utilizando Rails e PostgreSQL
Utilizando Rails e PostgreSQLUtilizando Rails e PostgreSQL
Utilizando Rails e PostgreSQL
 
Hercules
HerculesHercules
Hercules
 
Collectd
CollectdCollectd
Collectd
 
Testes Unitarios Com PostgreSQL
Testes Unitarios Com PostgreSQLTestes Unitarios Com PostgreSQL
Testes Unitarios Com PostgreSQL
 
PostgreSQL Ha
PostgreSQL HaPostgreSQL Ha
PostgreSQL Ha
 
Arquivos No Banco
Arquivos No BancoArquivos No Banco
Arquivos No Banco
 
Git
GitGit
Git
 

Minicurso PostgreSQL

  • 1. PostgreSQL 8.4 Diogo Biazus diogob@gmail.com
  • 2. PostgreSQL 7.X ● Totalmente ACID ● MVCC ● Tipos e operadores customizáveis ● Diversas linguagens procedurais ● Hot backup ● Código aberto (BSD) ● Facilidade de extensão ● PL/pgSQL, PL/Python, PL/Perl, PL/Java, PL/PHP, PL/Ruby, etc.
  • 3. PostgreSQL 8.0 ● Win32 ● Pontos de salvamento ● Recuperação a partir de logs ● Tablespaces ● Tratamento de erro em PL/pgSQL ● Otimizações
  • 4. PostgreSQL 8.3 ● Warm-standby ● Commit em duas etapas ● Consultas RETURNING ● FTS integrado ao banco ● XML integrado ● Tipos UUID e ENUM ● Integração LDAP
  • 5. PostgreSQL 8.4 e Avante ● 8.4 – Window functions – CTE e recursividade – Permissão de colunas ● Futuro – Hot-standby (rep. assíncrona nativa) – Replicação síncrona nativa – Bitmap index no disco – SEPostgres
  • 6. Portes e pacotes ● Disponibilidade do fonte e de pacotes para: – *BSD – Linux ● pacotes em .rpm e .deb. – Windows ● Pacotes msi (a partir da 8.0)
  • 7. Instalando o servidor no Linux ● Debian – apt-get install postgresql-8.3 ● Compilação simples – Fazer download do fontes em: http://www.postgresql.org/ftp/source/ – Descompactar – ./configure – make install
  • 8. Instalando o servidor no Linux ● Se não for através do sistema de pacotes deve-se iniciar o agrupamento com o initdb ● É necessário criar a pl/pgsql nos bancos em que ela for utilizada ● Para instalar módulos do contrib basta instalar o pacote postgresql-contrib (se for usado sistema de pacotes) ou entrar no diretório contrib correspondente e digitar make install
  • 9. Instalando o servidor no Linux ● initdb – Usar o flag --locale – O diretório deve pertencer ao usuário que vai rodar o banco. Máscara de permissão devem ser 700 – Deve ser executado com o usuário que vai rodar o banco – O primeiro usuário do banco terá o mesmo nome do usuário do sistema que executou o initdb
  • 10. Instalando no Windows ● Fazer o download do msi ● Descompactar ● Iniciar o instalador
  • 11. Instalando no Windows ● Seleção de idioma do instalador
  • 12. Instalando no Windows ● Seleção de componentes
  • 13. Instalando no Windows ● Configuração de serviço
  • 14. Instalando no Windows ● initdb –locale=pt_BR -D diretorio
  • 15. Instalando no Windows ● createlang 'plpgsql' template1
  • 16. Instalando no Windows ● Instalando módulos do contrib
  • 17. Configurações básicas ● Arquivos dentro do diretório de dados ● pg_hba – configuração de como os hosts devem se autenticar ● postgresql.conf – demais configurações do banco
  • 18. Configurações básicas ● pg_hba – Regras de como autenticar, lidas sequencialmente do inicio ao fim do arquivo. – Tipos de autenticação: ● trust, reject, password, md5, crypt, krb4, krb5, ident, pam – Ex.: Tipo BD Usuario IP/Rede Método local all all ident sameuser host all all 127.0.0.1/32 md5
  • 19. Configurações básicas ● postgresql.conf – listen_addresses = '*' ● O banco escuta em todas interfaces de rede – max_connections = 100 ● Máximo de conexões concorrentes
  • 20. Acessando o banco ● psql template1 postgres – comandos do psql: ● l – lista bancos de dados ● c bd – conecta no banco bd ● dt – lista relações ● i – executa arquivo contendo comandos sql ● ? – mostra help do psql ● h – mostra referência do SQL ● h comando – mostra referência do comando
  • 21. SQL Básico ● Nomes – Devem ser auto-explicativos – “ ” Para nomes de objetos – ' ' Para literais
  • 22. SQL Básico ● DDL CREATE DATABASE nome [ [ WITH ] [ OWNER [=] dono ] [ TEMPLATE [=] modelo ] [ ENCODING [=] codificação ] [ TABLESPACE [=] tablespace ] ] DROP DATABASE nome
  • 23. SQL Básico ● DDL CREATE [ TEMPORARY ] TABLE nome_tabela ( { nomecoluna tipo [ DEFAULT expressão ] } [, ... ] ) [ WITH OIDS | WITHOUT OIDS ] [ TABLESPACE tablespace ] DROP TABLE nome [ CASCADE | RESTRICT ]
  • 24. SQL Básico ● DDL GRANT permissao ON objeto TO usuario [ WITH GRANT OPTION ] REVOKE permissao ON objeto FROM usuario
  • 25. SQL Básico ● CREATE DATABASE minicursos; ● CREATE TABLE instrutores ( id_instrutor serial PRIMARY KEY, nome varchar(100) NOT NULL );
  • 26. SQL Básico ● CREATE TABLE cursos ( id_curso serial PRIMARY KEY, id_instrutor int REFERENCES instrutores, nome varchar(100) NOT NULL );
  • 27. SQL Básico ● DML SELECT [ ALL | DISTINCT ] * | expressão [ AS nome ] [, ...] [ FROM relacao [, ...] ] [ WHERE condição ] [ GROUP BY expressão [, ...] ] [ HAVING condição [, ...] ] [ ORDER BY expressão [ ASC | DESC | [ LIMIT { quantidade | ALL } ] [ OFFSET inicio ]
  • 28. SQL Básico ● DML INSERT INTO tabela [ ( coluna [, ...] ) ] { DEFAULT VALUES | VALUES ( { expressão | DEFAULT } [, ...] ) | consulta }
  • 29. SQL Básico ● INSERT INTO instrutores VALUES (DEFAULT, 'Diogo Biazus'); ● INSERT INTO cursos VALUES (DEFAULT, 1, 'Mini-curso de PostgreSQL');
  • 30. SQL Básico ● SELECT * FROM cursos; ● SELECT * FROM instrutores; ● SELECT * FROM cursos JOIN instrutores USING (id_instrutor);
  • 31. SQL Básico ● DML UPDATE tabela SET coluna = { expressão | DEFAULT } [, ...] [ WHERE condição ]
  • 32. SQL Básico ● DML DELETE FROM tabela [ WHERE condição ]
  • 33. SQL Básico ● DCL BEGIN COMMIT SAVEPOINT nome ROLLBACK TO [ SAVEPOINT ] nome ROLLBACK
  • 34. SQL Básico ● BEGIN; ● UPDATE cursos SET nome = 'teste'; ● SELECT * FROM cursos; ● SAVEPOINT atualiza; ● DELETE FROM cursos; ● SELECT * FROM cursos; ● ROLLBACK TO atualiza; ● SELECT * FROM cursos; ● ROLLBACK; ● SELECT * FROM cursos;
  • 35. Manutenção básica ● VACUUM – Remove versões antigas de registros – Deve ser agendado no mínimo diariamente se o autovacuum for desabilitado – ANALYZE para atualizar estatísticas
  • 36. Manutenção básica ● Backups – Podem ser feitos com o banco no ar – pg_dump ● Formatos: Plain, Custom e Tar – – pg_restore ● Pode-se usar listas para restauração
  • 37. Tablespaces ● Área de dados separada fisicamente ● CREATE TABLESPACE nome [ OWNER dono ] LOCATION 'diretorio'
  • 38. Funções em PL/pgSQL ● Porque PL/pgSQL? ● Ela é bonita? Não. ● Ela é OO? Não. ● Ela é popular? Não. ● Mesmo assim ela é ótima no que faz!
  • 39. Funções em PL/pgSQL CREATE FUNCTION primeira_funcao() RETURNS VOID AS ' BEGIN RETURN; END; ' LANGUAGE 'plpgsql'; DROP FUNCTION primeira_funcao();
  • 40. Funções em PL/pgSQL ● Estrutura básica [DECLARE nome_da_variável tipo; ... ] BEGIN comandos; END;
  • 41. Funções em PL/pgSQL CREATE OR REPLACE FUNCTION primeira_funcao() RETURNS VOID AS $body$ BEGIN RAISE NOTICE 'Minha primeira rotina em PL/pgSQL'; RETURN; END; $body$ LANGUAGE 'plpgsql';
  • 42. Funções em PL/pgSQL ● Declarando variáveis: DECLARE numero int4 NOT NULL DEFAULT 10; ● Atribuindo valores: numero := 15;
  • 43. Funções em PL/pgSQL ● Estruturas de controle: – IF ... THEN ... ELSIF ... THEN ... ELSE ... END IF; – FOR ... LOOP END LOOP; – LOOP ... END LOOP; – WHILE ... LOOP ... END LOOP;
  • 44. Funções em PL/pgSQL ● Executando SQL: CREATE OR REPLACE FUNCTION exclui_cliente(pid_cliente int4) RETURNS int4 AS $body$ DECLARE vLinhas int4 DEFAULT 0; BEGIN DELETE FROM clientes WHERE id_cliente = pid_cliente; GET DIAGNOSTICS vLinhas = ROW_COUNT; RETURN vLinhas; END; $body$ LANGUAGE 'plpgsql';
  • 45. Domínios ● Podemos fazer validações mais complexas – CPF, CNPJ, email, dependência de arquivos, etc... ● E criar domínios para validar de forma consistente
  • 46. Domínios CREATE OR REPLACE FUNCTION valida(p1 varchar) RETURNS boolean AS $$ BEGIN RETURN (lower(p1) IN ('a', 'b', 'ab', 'o')); END; $$ LANGUAGE plpgsql;
  • 47. Domínios CREATE DOMAIN tipo_sanguineo AS varchar CHECK(valida(VALUE)); CREATE TABLE pessoa ( nome varchar PRIMARY KEY, sangue tipo_sanguineo NOT NULL );
  • 48. Domínios INSERT INTO pessoa (nome, sangue) VALUES ('Diogo', 'm'); INSERT INTO pessoa (nome, sangue) VALUES ('Diogo', 'm');
  • 49. Gatilhos em PL/pgSQL ● Tipo de retorno TRIGGER ● Nível de linha e nível de comando ● Variáveis para nível de linha: – NEW – OLD – TG_OP – TG_WHEN
  • 50. Gatilhos em PL/pgSQL CREATE TRIGGER nome { BEFORE | AFTER } { evento [ OR ... ] } ON tabela [ FOR [ EACH ] { ROW | STATEMENT } ] EXECUTE PROCEDURE funcao( argumentos )
  • 51. Gatilhos em PL/pgSQL CREATE TABLE usuarios ( nome varchar(30) PRIMARY KEY, senha char(32) );
  • 52. Gatilhos em PL/pgSQL CREATE FUNCTION md5_senha() RETURNS TRIGGER AS $body$ BEGIN NEW.senha := md5(NEW.senha); RETURN NEW; END; $body$ LANGUAGE 'plpgsql';
  • 53. Gatilhos em PL/pgSQL CREATE TRIGGER md5_senha BEFORE INSERT ON usuarios FOR EACH ROW EXECUTE PROCEDURE md5_senha(); INSERT INTO usuarios VALUES ('usuario', 'senha'); SELECT * FROM usuarios;
  • 54. Dicas de segurança ● O objetivo é minimizar os danos ● Sempre “engaiole” o seu usuário ● Conheça bem os comandos GRANT e REVOKE ● Use funções “SECURITY DEFINER” como interface para operações críticas ● Crie usuários comuns para criação e administração de bancos ● Crie usuários comuns para operação de bancos ● Usuários diferentes para bancos diferentes
  • 55. Extensões ● Funções em C ● DBLink: Consultas remotas ● DBI-Link: Consultas em fontes DBI ● Tsearch: Indexação de textos no PgSQL ● PgXML: Manipulação com Xquery ● PostGis: Dados geográficos
  • 56. Replicação ● Slony I ● PGPool II ● Warm-standby (hot-standby na 8.5) ● Skytools
  • 57. Referências ● Sobre o PgSQL – http://www.postgresql.org.br/ – http://www.postgresql.org/