- 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
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.
4. Caractersticas
- Melhor suporte: independente do fornecedor
- Baixo custo de manuteno e tunning
- 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
- 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
- Ferramentas grficas de administrao:
- Ferramentas de modelagem:
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
- d lista objetos existentes
- l lista bancos de dados disponveis
7. Instalao
- Compilar (estabelece alguns parmetros intrnsecos)
- Criar cluster (estabelece local padro de dados, localizao e
codificao)
- Criar um banco de dados (estabelece variveis de desempenho,
localizao e codificao)
- Configurao de path e inicializao
- Configurao do controle de acesso
8. Objetos SQL
- ndices: btree, hash, rtree e gist
- Views (podem receber UPDATE, INSERT e UPDATE atravs de
RULES)
- Esquemas (podem estar atrelados ou no aos usurios)
- Funes de converso de caracteres
- Funes de converso de tipo de dados
- Funes de utilizao de ndices
- Trigger, Constraint Trigger
9. Autenticao
- local (usando socket UNIX)
- host (TCP/IP com ou sem SSL)
- hostnossl (TCP/IP sem SSL)
- TRUST (aceita incondicionalmente)
- REJECT (rejeita incondicionalmente)
10. Localizao
- Formatao de quantias monetrias
- 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
- 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
- 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
- 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
- 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.
17. Administrao
- 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:
-
- uso de recursos do sistema
-
- 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
-
- 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
- FROM t1, t2 > FROM t1 LEFT OUTER JOIN t2
- WHERE t1.id = t2.id(+)ON t1.id = t2.id
- DECODE (sexo, 'M',> CASE WHEN sexo = 'M' then
'Masculino'
- 'Masculino,'F','Feminino') WHEN sexo = 'F' then 'Feminino'
END
- sysdate, systimestamp > current_date, current_timestamp
- 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.