PostgreSQL: Conceitos e aplicações

5,530
-1

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,530
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

PostgreSQL: Conceitos e aplicações

  1. 1. PostgreSQL Conceitos e aplicações Fernando Ike Fábio Telles 29 de Outubro de 2005 http://www.mhowto.com.br/database/
  2. 2. Agenda  Conceitos e Aplicações Migrando para PostgreSQL ­ Boas práticas ­ Histórico ­ Características ­ Antes de migrar ­ Ferramentas ­ Durante a migração ­ Instalação ­ SQL ­ Objetos ­ PL ­ Storage ­ Autenticação ­ Backup ­ Localização ­ Segurança ­ Transações ­ ora2pg ­ Backup ­ Contatos ­ Storage ­ Administração ­ Tunning ­ Comunidade
  3. 3. Histórico • 1980 inicio do Ingres pela Berkeley e Computer Associates • 1986 inicio do Postgres pela Berkeley • 1987 primeira versão do Postgres • 1989 liberação para usuários restritos da versão 1 • 1991 versão 3  com as principais funcionalidades atuais. • 1993 versão 4.2, última lançada pela Berkeley • 1994 Andrew Yu e Jolly Chen criaram a versão conhecida  como Postgre95 (versão 5) com interpretador para a linguagem  SQL. • 1997 nome do projeto muda para PostgreSQL, a versão 6 é  lançada • 2000 versão 7 lançada com suporte a Foreign Key • 2005 versão 8 lançada com versão nativa (sem uso do  CYGWIN) para Windows, TABLESPACES, SAVEPOINTS,  POINT­IN­TIME­RECOVERY. etc. • 2005 em versão 8.1 beta 4
  4. 4. Características • Melhor suporte: independente do fornecedor • Baixo custo de manutenção e tunning • Alta estabilidade • Extensibilidade: pode ser customisado com funções, tipos ou  através acesso ao código fonte. Extensões na pasta /contrib • Flexibilidade: roda em várias plataformas (inclusive BSD) • Robusto: criado para suportar grande volume de dados e  transações concorrentes. • Controle de transações utilizando MVCC ou Locks explícitos • Compatível com ANSI SQL • Funções em SQL, C, C++, PLpg/SQL, PL/Perl, PL/Python,  PL/TCL suportadas nativamente além de  PL/Java, PL/PHP,  PL/R.
  5. 5. (algumas) Ferramentas Ferramenta nativa: • psql Ferramentas gráficas de administração:  • pgADMIN III • PHPpgADMIN • TORA • pgACCESS   Ferramentas de modelagem: • Data Architect • Erwin • Case Studio
  6. 6. Uso do psql Parâmetros ao invocar o psql: • ­U <user> : usuário que se conectará ao banco • ­h <host> : 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 disponíveis • q sair
  7. 7. Instalação • Adquirir código­fonte • Compilar (estabelece alguns parêmetros intrínsecos) • Criar usuário 'postgres' • Criar cluster (estabelece local padrão de dados, localização e  codificação) • Iniciar o postmaster • Criar um banco de dados (estabelece variáveis de desempenho,  localização e codificação) • Teste com psql • Configuração de path e inicialização • Configuração do controle de acesso
  8. 8. Objetos SQL • Índices: btree, hash, rtree e gist  •Sequencias • Views (podem receber UPDATE, INSERT e UPDATE através  de RULES) • Domínios • Esquemas (podem estar atrelados ou não aos usuários) • Tipos de dados • Funções  • Funções de agragação • Funções de operadores • Funções de conversão de caracteres • Funções de conversão de tipo de dados • Funções de utilização de índices • Trigger, Constraint Trigger
  9. 9. Autenticação Tipos de autenticação:  local (usando socket UNIX) ✔ ✔ host (TCP/IP com ou sem SSL) ✔ hostssl (TCP/IP com SSL) ✔ hostnossl (TCP/IP sem SSL) Métodos de autenticação:  TRUST (aceita incondicionalmente) ✔ ✔ REJECT (rejeita incondicionalmente) ✔ md5 ✔ crypt ✔ password (texto puro) ✔ Kerberos v4 e v5 ✔ ident  ✔ PAM
  10. 10. Localização Suporte a localização:  Ordenação de strings ✔ ✔ Idioma de menssagens ✔ Formatação de quantias monetárias ✔ Formatação de números ✔ Formatação de data e hora Suporte a conjunto de caracteres:  Suporte a ASCII, ISO, EUC, MULE, UTF8 ✔ ✔ Conversão automática de codificação no servidor e cliente.
  11. 11. Transações • Possibilidade de usar modo auto­commited • Uso de controle de multiversão (MMVC) permite acesso  simuntâneo de leitura e escrita utilizando um snapshot separado • Uso de isolamento Read Commited ou Serializable • Possibilidade de utilizar Lock explícito do tipo Acces Share,  Row Share, Row Exclusive, Share Update Exclusive, Share,  Share Row Exclusive, Exclusive e Access Exclusive. • Facilita a manutenção do sistema pois quando um domínio é  alterado, todos campos baseados nele são alterados  autimáticamente. • Transação pode utilizar SAVEPOINT para retornar a trasação  até pontos específicos.
  12. 12. Backup Dump Realiza dump consistente com o banco de dados on­line sem  ✔ bloquear usuários ✔pg_dump gera dump em modo texto (em formato SQL), binário  e compactado por GZIP. ✔Podem ser selecionados parte dos objetos na exportação ou  importação como permições, dados, esquemas, etc. ✔um dump pode ser exportado ou compactado diretamente para  outro banco utilizando pipe! ✔Objetos binários só podem ser exportados no modo binário.
  13. 13. Backup Cópia do datafile  Só pode ser realizado com o banco off­line ou com snapshot  ✔ (através do SO) de todos tablespaces e log (WAL)  simultaneamente. Cópia do datafile + cópia de log (WAL)  Permite a cópia dos datafiles com o banco de dados on­line sem  ✔ o uso de snapshot. ✔ Permite a recuperação uma data e hora específica ou até o a  realização de determinada transação. ✔ Permite o controle de históricos paralelos de recuperações até  um ponto específico. ✔ Necessita de espaço para arquivamento do WAL a partir da  realização da última cópia dos datafiles. ✔ Permite a criação de um Stand By em outro servidor.
  14. 14. Storage • Uso de Table Spaces para tabelas e índices • Cada Table Space define um diretório vazio onde o  PostgreSQL cria arquivos automaticamente. Estes diretórios são  ligados por links simbólicos  • Área para catálogo do sistema e armazenamento temporário é  definido na criação do Cluster e não pode ser modificado • Mecanismo TOAST gerencia o armazenamento de tabelas com  mais de 1GB e colunas de comprimento variável. • Colunas de tamanho variável podem ser comprimidas ou não e  armazenadas em arquivo separado da tabela ou não. 
  15. 15. Storage Limites*: • Tamanho máximo do Banco de Dados: Ilimitado • Tamanho máximo de tabela: 32 TB • Tamanho máximo de linha: 1,6 TB • Tamanho máximo de campo: 1 GB • Número máximo de linhas por tabela: Ilimitado • Número máximo de colunas por tabela: 250 – 1600  (dependendo dos tipos de dados utilizados) • Número de índices por tabela: Ilimitado * Estes valores podem variar devido a restrições do sistema operacional ou  plataforma utilizada
  16. 16. Administração Vacuum: • Recupera espaço em disco utilizado pelo MMVC • Atualiza estatísticas utilizadas pelo planejador • Estatísticas podem ser diferenciadas para colunas específicas de  tabelas • Previne reinicio no id de transações • Pode ser executado com o Banco de Dados on­line com ajustes  no impacto de desempenho.  • Pode ser automatizado
  17. 17. Administração Monitoramento: • Estatísticas e bloqueios no servidor são visíveis em tabelas do  catálogo ou através de funções. • Quantidade de estatísticas coletadas pode ser alterada para todo  o servidor ou para seções específicas. • Espaço em disco ocupado por tabelas e índices podem ser  monitorados através de tabelas do catálogo ou através da  ferramenta oid2toname
  18. 18. Tunning • Acesso ao código fonte permite otimização para casos especiais • Compilação permite habilitar ou não caratcterísticas que afetam  o desempenho • postgresql.conf possui vários parâmetros que controlam: • o uso de memória • uso de recursos do sistema  • localização de arquivos • conexão e autenticação • uso do VACUUM • escrita em segundo plano • WAL e pontos de controle • local, quantidade de informações e formato de log • uso de índices, controle de custo, e otimizador genético  controle de coleta de estatísticas do servidor • Parâmetros de postgresql.conf podem ser alterados reiniciando  o servidor, ou podem ser personalizados para um Banco de  Dados, secção ou usuário específico.
  19. 19. Comunidade • Site oficial: http://www.postgresql.org • Documentação de todas versões • Notícias de lançamentos • Dowload do código fonte • Listas de discussão • Projetos relacionados: http://gborg.postgresql.org • Outros projetos: http://pgfoundry.org/ • Certificação: http://osb.sra.co.jp/postgresql­ce/news_en.html • Diretório Contrib no código­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. 20. Migrando de Oracle para PostgreSQL Fernando Ike Fábio Telles 29 de Outubro de 2005 http://www.mhowto.com.br/database/
  21. 21. Boas práticas • Evitar utilizar extenções específicas de um SGBD • Utilizar ao máximo a sintaxe padrão ANSI SQL • Evite o uso de mixed case (notação Húngara), use minúsculas  para nomes de objetos e maiúsculas para palavras reservadas. • Documentar rigorosamente todo o código armazenado no  banco • Utilizar tipos de dados binários somente quando necessário
  22. 22. Antes de migrar • Leia atentamente toda a documentação dos dois SGBDs e  identifique diferenças na sintaxe e funcionalidades utilizadas  • Realizar Backup total antes de realizar qualquer teste • Realizar testes em um servidor de teste. • Verificar codificação de caracteres e localização. • Verificar espaço em disco disponível, o espaço ocupado pelo  banco pode variar de SGBD para SGBD.
  23. 23. Durante a migração • Registre todo o processo.  • Migre primeiros sistemas não críticos • Migre primeiro o que é mais simples como tabelas e índices • Se possível,  gere scripts em texto puro com todo DDL e  DML • Importe tabelas, dados e constraints separadamante • Habilitar e checar logs durante exportações e importações. • Migre primeiro o que é mais simples como tabelas e índices • Homologue cada etapa antes de prosseguir.
  24. 24. Diferenças 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 Funções:  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. 25. SQL • Catálogo de sistema SYS e SYSTEM  do Oracle são  equivalentes ao pg_catalog e inoformation_schema no  PostgreSQL • PostgreSQL é sensitive case. Todos nomes de objetos com  letras maiúsculas devem estar entre aspas. • O PostgreSQL não necessita do uso da tabela DUAL. Pode ser  criada uma para manter a compatibilidade • Implementação de hierarquia entre tabelas, XML, Database  Link e outras funções avançadas possuem diferenças • O PostgreSQL não possui  visões materializadas. No entanto é  possível contornar este problema com gatilhos e funções
  26. 26. PL/SQL X PLpg/SQL • Não existem procedures no PostgreSQL, no entanto uma  função pode ser utilizada retornando o tipo VOID. • Não existem valores DEFAULT para parâmetos recebidos no  PL/SQL, no entanto é possível utilizar sobrecarga de funções. • O PostgreSQL não tem suporte aos parâmetros IN e OUT,  somente IN* • Não existem Packages no PostgreSQL, no entanto os objetos  podem ser organizados num esquema separado. Variáveis de  nivel de pacote podem ser armazenadas em tabelas temporárias  mantidas durante a sessão. • Cursores não são necessários no PostgreSQL. A consulta deve  ser declarada junto a clausula FOR do laço. • O corpo da função deve estar marcas de dólar no PostgreSQL • Os gatilhos no PostgreSQL chamam uma e apenas uma função,  não havendo código em seu corpo. * Este problema foi resolvido na versão 8.1 que se encontra no beta 4
  27. 27. Storage • O conceito de Espaço de Tabelas no PostgreSQL se refere a  uma pasta que é gerenciada pelo SGBD. Não é possível definir  datafiles específicos. A única influência sobre os datafiles é  especificar o formato de armazinamento nas colunas com valores  grandes. • O PostgreSQL não tem implementado explicitamente o  conceito de extenções e segmentos. • Ainda não é possível especificar o local de armazenamento  separado para área temporária para áreas temporárias (para  operações de rollback, ordenação, indexação, etc). Estas áreas  ficam todas no mesmo local que o catálogo do sistema.
  28. 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 cópia de arquivos de dados é semelhante em  ambos. • Conceito de Stand By é semelhante em ambos. • O PostgreSQL não possui uma ferramenta de flash back. • O PostgreSQL não possui ferramenta natica no estilo do  RMAN
  29. 29. Segurança • Conceito de ROLE no Oracle é semelhante ao conceito de GROUP no  PostgreSQL. Um GROUP não pode ser usado para se conectar, apenas  para agrupar permissões de usuários* • GRANT e REVOKE tem funcionalidade semelhante • SCHEMAS não são automaticamente atrelados ao usuário 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 permissões necessárias para isso. • O ROLE “connect” no Oracle é realizado através do pg_hba.conf no  PostgreSQL • O ROLE “resource” no Oracle é semelhante a possuir privilégio para  criar objetos num esquema do PostgreSQL. • O Role DBA é no Oracle é semelhante ao superusuário do PostgreSQL • O Role SYS é no Oracle é semelhante ao usuário POSTGRES no  PostgreSQL * Os GROUPs serão convertidos ROLEs com as mesmas funcionalidades na versão 8.1
  30. 30. ora2pg • Feito em PERL. Depende dos módulos DBI, DBD::Pg e  DBD::Oracle • Importa dados e definições do Oracle para um arquivo texto ou  direto para um banco no PostgreSQL • Suporte a extração 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 específico para ser  importado.  • Corrige nomes de tipos de dados diferentes. • Extrai o código do corpo de triggers numa função. • Algumas funções com nome diferente precisam  • Funções em PL/SQL geralmente precisam de um pouco de  edição manual. • Funções SQL diferentes precisam de edição manual.
  31. 31. Contatos Fábio Telles  <fabio.telles@diadema.sp.gov.br> <fabio@nantu.com.br> Fernando Ike <fernando.ike@diadema.sp.gov.br> <fernando@nantu.com.br>

×