postgresql conceitos e aplicações

Download PostgreSQL  Conceitos e aplicações

If you can't read please download the document

Upload: fabio-telles-rodriguez

Post on 18-Jun-2015

4.890 views

Category:

Technology


49 download

DESCRIPTION

Palestra realizada em outubro de 2005 na Maratona HowTo sobre conteitos básicos do PostgreSQL

TRANSCRIPT

  • 1. Fernando Ike Fbio Telles PostgreSQLConceitos e aplicaes 29 de Outubro de 2005 http://www.mhowto.com.br/database/

2. Agenda

  • Conceitos e AplicaesMigrando para PostgreSQL
  • Histrico - Boas prticas - Caractersticas - Antes de migrar - Ferramentas - Durante a migrao - Instalao - SQL - Objetos - PL
  • Autenticao - Storage
  • Localizao - Backup
  • Transaes - Segurana
  • Backup - ora2pg
  • Storage - Contatos
  • Administrao
  • Tunning
  • Comunidade

3. Histrico

  • 1980 inicio do Ingres pela Berkeley e Computer Associates
  • 1986 inicio do Postgres pela Berkeley
  • 1987 primeira verso do Postgres
  • 1989 liberao para usurios restritos da verso 1
  • 1991 verso 3com as principais funcionalidades atuais.
  • 1993 verso 4.2, ltima lanada pela Berkeley
  • 1994 Andrew Yu e Jolly Chen criaram a verso conhecida como Postgre95 (verso 5) com interpretador para a linguagem SQL.
  • 1997 nome do projeto muda para PostgreSQL, a verso 6 lanada
  • 2000 verso 7 lanada com suporte a Foreign Key
  • 2005 verso 8 lanada com verso nativa (sem uso do CYGWIN) para Windows, TABLESPACES, SAVEPOINTS, POINT-IN-TIME-RECOVERY. etc.
  • 2005 em verso 8.1 beta 4

4. Caractersticas

  • Melhor suporte: independente do fornecedor
  • Baixo custo de manuteno e tunning
  • Alta estabilidade
  • Extensibilidade: pode ser customisado com funes, tipos ou atravs acesso ao cdigo fonte. Extenses na pasta /contrib
  • Flexibilidade: roda em vrias plataformas (inclusive BSD)
  • Robusto: criado para suportar grande volume de dados e transaes concorrentes.
  • Controle de transaes utilizando MVCC ou Locks explcitos
  • Compatvel com ANSI SQL
  • Funes em SQL, C, C ++ , PLpg/SQL, PL/Perl, PL/Python, PL/TCL suportadas nativamente alm dePL/Java, PL/PHP, PL/R.

5. (algumas) Ferramentas

  • Ferramenta nativa:
  • psql
  • Ferramentas grficas de administrao:
  • pgADMIN III
  • PHPpgADMIN
  • TORA
  • pgACCESS
  • Ferramentas de modelagem:
  • Data Architect
  • Erwin
  • Case Studio

6. Uso do psql

  • Parmetros ao invocar o psql:
  • -U : usurio que se conectar ao banco
  • -h : local onde o Banco de Dados se conectar
  • Comandos utilizados dentro do psql:
  • ? ajuda para comandos do psql
  • h ajuda para sintaxe SQL
  • d lista objetos existentes
  • i executa arquivo SQL
  • l lista bancos de dados disponveis
  • q sair

7. Instalao

  • Adquirir cdigo-fonte
  • Compilar (estabelece alguns parmetros intrnsecos)
  • Criar usurio 'postgres'
  • Criar cluster (estabelece local padro de dados, localizao e codificao)
  • Iniciar o postmaster
  • Criar um banco de dados (estabelece variveis de desempenho, localizao e codificao)
  • Teste com psql
  • Configurao de path e inicializao
  • Configurao do controle de acesso

8. Objetos SQL

  • ndices: btree, hash, rtree e gist
  • Sequencias
  • Views (podem receber UPDATE, INSERT e UPDATE atravs de RULES)
  • Domnios
  • Esquemas (podem estar atrelados ou no aos usurios)
  • Tipos de dados
  • Funes
  • Funes de agragao
  • Funes de operadores
  • Funes de converso de caracteres
  • Funes de converso de tipo de dados
  • Funes de utilizao de ndices
  • Trigger, Constraint Trigger

9. Autenticao

  • Tipos de autenticao:
  • local (usando socket UNIX)
  • host (TCP/IP com ou sem SSL)
  • hostssl (TCP/IP com SSL)
  • hostnossl (TCP/IP sem SSL)
  • Mtodos de autenticao:
  • TRUST (aceita incondicionalmente)
  • REJECT (rejeita incondicionalmente)
  • md5
  • crypt
  • password (texto puro)
  • Kerberos v4 e v5
  • ident
  • PAM

10. Localizao

  • Suporte a localizao:
  • Ordenao de strings
  • Idioma de menssagens
  • Formatao de quantias monetrias
  • Formatao de nmeros
  • Formatao de data e hora
  • Suporte a conjunto de caracteres:
  • Suporte a ASCII, ISO, EUC, MULE, UTF8
  • Converso automtica de codificao no servidor e cliente.

11. Transaes

  • Possibilidade de usar modo auto-commited
  • Uso de controle de multiverso (MMVC) permite acesso simuntneo de leitura e escrita utilizando um snapshot separado
  • Uso de isolamentoRead CommitedouSerializable
  • Possibilidade de utilizarLockexplcito do tipo Acces Share, Row Share, Row Exclusive, Share Update Exclusive, Share, Share Row Exclusive, Exclusive e Access Exclusive.
  • Facilita a manuteno do sistema pois quando um domnio alterado, todos campos baseados nele so alterados autimticamente.
  • Transao pode utilizar SAVEPOINT para retornar a trasao at pontos especficos.

12. Backup

  • Dump
  • Realiza dump consistente com o banco de dados on-line sem bloquear usurios
  • pg_dump gera dump em modo texto (em formato SQL), binrio e compactado por GZIP.
  • Podem ser selecionados parte dos objetos na exportao ou importao como permies, dados, esquemas, etc.
  • um dump pode ser exportado ou compactado diretamente para outro banco utilizando pipe!
  • Objetos binrios s podem ser exportados no modo binrio.

13. Backup

  • Cpia do datafile
  • S pode ser realizado com o banco off-line ou com snapshot (atravs do SO) de todos tablespaces e log (WAL) simultaneamente.
  • Cpia do datafile + cpia de log (WAL)
  • Permite a cpia dos datafiles com o banco de dados on-line sem o uso de snapshot.
  • Permite a recuperao uma data e hora especfica ou at o a realizao de determinada transao.
  • Permite o controle de histricos paralelos de recuperaes at um ponto especfico.
  • Necessita de espao para arquivamento do WAL a partir da realizao da ltima cpia dos datafiles.
  • Permite a criao de um Stand By em outro servidor.

14. Storage

  • Uso de Table Spaces para tabelas e ndices
  • Cada Table Space define um diretrio vazio onde o PostgreSQL cria arquivos automaticamente. Estes diretrios so ligados por links simblicos
  • rea para catlogo do sistema e armazenamento temporrio definido na criao do Cluster e no pode ser modificado
  • Mecanismo TOAST gerencia o armazenamento de tabelas com mais de 1GB e colunas de comprimento varivel.
  • Colunas de tamanho varivel podem ser comprimidas ou no e armazenadas em arquivo separado da tabela ou no.

15. Storage

  • Limites*:
  • Tamanho mximo do Banco de Dados: Ilimitado
  • Tamanho mximo de tabela: 32 TB
  • Tamanho mximo de linha: 1,6 TB
  • Tamanho mximo de campo: 1 GB
  • Nmero mximo de linhas por tabela: Ilimitado
  • Nmero mximo de colunas por tabela: 250 1600 (dependendo dos tipos de dados utilizados)
  • Nmero de ndices por tabela: Ilimitado
  • * Estes valores podem variar devido a restries do sistema operacional ou plataforma utilizada

16. Administrao

  • Vacuum:
  • Recupera espao em disco utilizado pelo MMVC
  • Atualiza estatsticas utilizadas pelo planejador
  • Estatsticas podem ser diferenciadas para colunas especficas de tabelas
  • Previne reinicio no id de transaes
  • Pode ser executado com o Banco de Dados on-line com ajustes no impacto de desempenho.
  • Pode ser automatizado

17. Administrao

  • Monitoramento:
  • Estatsticas e bloqueios no servidor so visveis em tabelas do catlogo ou atravs de funes.
  • Quantidade de estatsticas coletadas pode ser alterada para todo o servidor ou para sees especficas.
  • Espao em disco ocupado por tabelas e ndices podem ser monitorados atravs de tabelas do catlogo ou atravs da ferramenta oid2toname

18. Tunning

  • Acesso ao cdigo fonte permite otimizao para casos especiais
  • Compilao permite habilitar ou no caratctersticas que afetam o desempenho
  • postgresql.conf possui vrios parmetros que controlam:
    • o uso de memria
    • uso de recursos do sistema
    • localizao de arquivos
    • conexo e autenticao
    • uso do VACUUM
    • escrita em segundo plano
    • WAL e pontos de controle
    • local, quantidade de informaes e formato de log
    • uso de ndices, controle de custo, e otimizador gentico
    • controle de coleta de estatsticas do servidor
    • Parmetros de postgresql.conf podem ser alterados reiniciando o servidor, ou podem ser personalizados para um Banco de Dados, seco ou usurio especfico.

19. Comunidade

  • Site oficial:http://www.postgresql.org
    • Documentao de todas verses
    • Notcias de lanamentos
    • Dowload do cdigo fonte
    • Listas de discusso
    • Projetos relacionados:http://gborg.postgresql.org
    • Outros projetos:http://pgfoundry.org/
    • Certificao: http://osb.sra.co.jp/postgresql-ce/news_en.html
    • Diretrio Contrib no cdigo-fonte
    • Projetos em destaque: GiST, pg_pool, pg_cluster, xml, etc.
    • Site nacional: http://postgresql.org.br
    • Canais em irc.freenodes.net:
      • #POSTGRESQL, #POSTGRESQL-BR

20. Fernando Ike Fbio Telles Migrando de Oracle para PostgreSQL 29 de Outubro de 2005 http://www.mhowto.com.br/database/ 21. Boas prticas

  • Evitar utilizar extenes especficas de um SGBD
  • Utilizar ao mximo a sintaxe padro ANSI SQL
  • Evite o uso de mixed case (notao Hngara), use minsculas para nomes de objetos e maisculas para palavras reservadas.
  • Documentar rigorosamente todo o cdigo armazenado no banco
  • Utilizar tipos de dados binrios somente quando necessrio

22. Antes de migrar

  • Leia atentamente toda a documentao dos dois SGBDs e identifique diferenas na sintaxe e funcionalidades utilizadas
  • Realizar Backup total antes de realizar qualquer teste
  • Realizar testes em um servidor de teste.
  • Verificar codificao de caracteres e localizao.
  • Verificar espao em disco disponvel, o espao ocupado pelo banco pode variar de SGBD para SGBD.

23.

  • Registre todo o processo.
  • Migre primeiros sistemas no crticos
  • Migre primeiro o que mais simples como tabelas e ndices
  • Se possvel,gere scripts em texto puro com todo DDL e DML
  • Importe tabelas, dados e constraints separadamante
  • Habilitar e checar logs durante exportaes e importaes.
  • Migre primeiro o que mais simples como tabelas e ndices
  • Homologue cada etapa antes de prosseguir.

Durante a migrao 24. Diferenas no SQL

  • ORACLE > PostgreSQL
  • Tipos de dados
  • VARCHAR2> VARCHAR
  • NUMBER > NUMERIC
  • JOIN
  • FROM t1, t2 > FROM t1 LEFT OUTER JOIN t2
  • WHERE t1.id = t2.id(+)ON t1.id = t2.id
  • Funes:
  • DECODE (sexo, 'M',> CASE WHEN sexo = 'M' then 'Masculino'
  • 'Masculino,'F','Feminino') WHEN sexo = 'F' then 'Feminino' END
  • NVL > COALESCE
  • sysdate, systimestamp > current_date, current_timestamp
  • UNION
  • MINUS > EXCEPT
  • Clausula LIMIT e OFSET:
  • ROWNUM, ROWID > LIMIT, OFSET, OID

25. SQL

  • Catlogo de sistema SYS e SYSTEMdo Oracle so equivalentes ao pg_catalog e inoformation_schema no PostgreSQL
  • PostgreSQL sensitive case. Todos nomes de objetos com letras maisculas devem estar entre aspas.
  • O PostgreSQL no necessita do uso da tabela DUAL. Pode ser criada uma para manter a compatibilidade
  • Implementao de hierarquia entre tabelas, XML, Database Link e outras funes avanadas possuem diferenas
  • O PostgreSQL no possuivises materializadas. No entanto possvel contornar este problema com gatilhos e funes

26. PL/SQL X PLpg/SQL

  • No existem procedures no PostgreSQL, no entanto uma funo pode ser utilizada retornando o tipo VOID.
  • No existem valores DEFAULT para parmetos recebidos no PL/SQL, no entanto possvel utilizar sobrecarga de funes.
  • O PostgreSQL no tem suporte aos parmetros IN e OUT, somente IN*
  • No existem Packages no PostgreSQL, no entanto os objetos podem ser organizados num esquema separado. Variveis de nivel de pacote podem ser armazenadas em tabelas temporrias mantidas durante a sesso.
  • Cursores no so necessrios no PostgreSQL. A consulta deve ser declarada junto a clausula FOR do lao.
  • O corpo da funo deve estar marcas de dlar no PostgreSQL
  • Os gatilhos no PostgreSQL chamam uma e apenas uma funo, no havendo cdigo em seu corpo.
  • * Este problema foi resolvido na verso 8.1 que se encontra no beta 4

27. Storage

  • O conceito de Espao de Tabelas no PostgreSQL se refere a uma pasta que gerenciada pelo SGBD. No possvel definir datafiles especficos. A nica influncia sobre os datafiles especificar o formato de armazinamento nas colunas com valores grandes.
  • O PostgreSQL no tem implementado explicitamente o conceito de extenes e segmentos.
  • Ainda no possvel especificar o local de armazenamento separado para rea temporria para reas temporrias (para operaes de rollback, ordenao, indexao, etc). Estas reas ficam todas no mesmo local que o catlogo do sistema.

28. Backup

  • Conceito de Redo no Oracle semelhante ao conceito de WAL no PostgreSQL
  • Conceito de DUMP semelhante em ambos.
  • DUMP no PostgreSQL permite redirecionamento via pipe.
  • Conceito de cpia de arquivos de dados semelhante em ambos.
  • Conceito de Stand By semelhante em ambos.
  • O PostgreSQL no possui uma ferramenta de flash back.
  • O PostgreSQL no possui ferramenta natica no estilo do RMAN

29. Segurana

  • Conceito de ROLE no Oracle semelhante ao conceito de GROUP no PostgreSQL. Um GROUP no pode ser usado para se conectar, apenas para agrupar permisses de usurios*
  • GRANT e REVOKE tem funcionalidade semelhante
  • SCHEMAS no so automaticamente atrelados ao usurio no PostgreSQL. Eles precisam ser criados manualmente. Depois disso se comporta de maneira parecida. No entanto um esquema pode possuir objetos de outro dono se ele tiver as permisses necessrias para isso.
  • O ROLE connect no Oracle realizado atravs do pg_hba.conf no PostgreSQL
  • O ROLE resource no Oracle semelhante a possuir privilgio para criar objetos num esquema do PostgreSQL.
  • O Role DBA no Oracle semelhante ao superusurio do PostgreSQL
  • O Role SYS no Oracle semelhante ao usurio POSTGRES no PostgreSQL
  • * Os GROUPs sero convertidos ROLEs com as mesmas funcionalidades na verso 8.1

30. ora2pg

  • Feito em PERL. Depende dos mdulos DBI, DBD::Pg e DBD::Oracle
  • Importa dados e definies do Oracle para um arquivo texto ou direto para um banco no PostgreSQL
  • Suporte a extrao de DDL de tabelas, indices, constraints, views, triggers, procedures, functions, packages e grants.
  • Dados podem ser exportados no formato INSERT ou COPY.
  • Pode ser selecionado um esquema ou tabela especfico para ser importado.
  • Corrige nomes de tipos de dados diferentes.
  • Extrai o cdigo do corpo de triggers numa funo.
  • Algumas funes com nome diferente precisam
  • Funes em PL/SQL geralmente precisam de um pouco de edio manual.
  • Funes SQL diferentes precisam de edio manual.