SlideShare ist ein Scribd-Unternehmen logo
1 von 57
Downloaden Sie, um offline zu lesen
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/

Weitere ähnliche Inhalte

Was ist angesagt?

Funcionalidades Oracle
Funcionalidades OracleFuncionalidades Oracle
Funcionalidades Oracleharlycarreiro
 
Banco de dados aula 4
Banco de dados aula 4Banco de dados aula 4
Banco de dados aula 4Ed W. Jr
 
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
 
Apresentação Oracle SGBD
Apresentação Oracle SGBDApresentação Oracle SGBD
Apresentação Oracle SGBDDenis Vieira
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open sourceRodrigo Aurélio
 
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 MySQLJonas Silveira
 
Banco de dados oracle
Banco de dados oracleBanco de dados oracle
Banco de dados oracleEduardo Lopes
 
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 MySqlHelder Lopes
 
PGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBAPGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBADextra
 
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 annotationeduardo dias
 

Was ist angesagt? (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
 

Andere mochten auch

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 PostgreSQLMatheus Espanhol
 
PostgreSQL: Performance Tuning
PostgreSQL: Performance TuningPostgreSQL: Performance Tuning
PostgreSQL: Performance TuningFernando Ike
 
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
 

Andere mochten auch (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
 

Ähnlich wie 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 2012Fabrízio Mello
 
PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPedro Fernandes Vieira
 
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 pdoJorge Luís Gregório
 
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
 
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ásicoBruno 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 UTIFernando Ike
 
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 PostgreSQLJuliano 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 UVAThiago 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 PHPArlindo 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 PostgreSQLRaul Oliveira
 

Ähnlich wie 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
 

Mehr von Diogo Biazus

Mehr von 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/