Meu Blog de PostgreSQL!!!: Julho 2007
O PostgreSQL oferece atualmente quatro tipos de indexação:
- B-Tree - Cria índices baseados em árvores B. É o tipo padrão empregado na criação de índices. Facilita consultas utilizando a igualdade de valores ou intervalos de valores (>= > = < <=).
- Hash - Índices Hashing organizam um banco de dados com base em funções. O índice hash funciona em comparações de igualdade (=). Em virtude desta limitação e do fato das operações com Índices Hash atualmente não serem logadas, demandando a reorganização manual de índices após falhas no banco, este índice tem o seu uso desencorajado. No entanto, o uso de índices hash geralmente apresenta resultados melhores que os feitos com B-tree.
- GiST - Índices GiST (Generalized Search Tree) oferecem uma infra-estrutura sobre a qual podem ser implementadas consultas. Geram uma árvore de pesquisa balanceada versátil similar a uma árvore B que pode ser utilizada com estruturas de dados definidas pelo usuário e em implementações diversas como índices para cubos Olap, árvores R (R-Trees) e em busca em texto. Internamente é composta por nós que apresentam pares (Valor, ponteiro para dado indexado ou para outro nó).
- GIN - Índices GIN(Generalized Inverted Index) são estruturas invertidas que permitem acesso a dados com mais de uma chave, como arrays. É composto por uma lista de registros tipo (chave, lista de linhas que contém o valor da chave). Internamente cada índice GIN contém uma árvore B com base no valor da chave indexada, cujas folhas apontam para os valores das linhas relacionadas à chave. Busca em fulltext pode ser acelerada utilizando-se este recurso.
A documentação do PostgreSQL afirma que é possível ao usuário definir o próprio método de indexação, no entanto salienta que o processo é difícil.
Versões anteriores do PostgreSQL apresentavam o método R-Tree, que indexava dados com base em árvores R, mas o mesmo foi removido por não apresentar quaisquer vantagens em relação a índices GiST, que é a principal opção para a sua substituição.
Vamos aos comandos!
Postado por Cláudio Leopoldino às 13:33 Nenhum comentário:
Pelo menos é o que sugere o último benchmark feito pela SUN. O benchmark envolveu testes de desempenho comparando as ferramentas.
No quesito performance os bancos estão se aproximando, com o MySql ganhando em robustez e o PostgreSql aumentando seu desempenho com implementações mais otimizadas e novos métodos de indexação, processamento de consultas e algoritmos internos. E o Oracle, um SENHOR BANCO DE DADOS, não tem do que se queixar. É uma ótima solução para as empresas, com uma grande equipe e muitos usuários pelo mundo.
Quem ganha com isso somos nós, os usuários. É engraçado ver um elefante alcançar a velocidade de um golfinho. Minha opinião é que o PostgreSQL é o que mais tem crescido. O que você acha?
- Blog do Telles - Savepoint
- Comentários de Josh Berkus, líder de desenvolvimento do PostgreSql
- Blog do Kevin Closson com o Ponto de Vista da Oracle
Postado por Cláudio Leopoldino às 09:05 Nenhum comentário:
Este comando realiza a cópia de dados entre tabelas e arquivos. É muito utilizada para fazer cargas de dados e implementar rotinas de backup e migrações de bancos de dados. Não faz parte da especificação tradicional do SQL.
A sintaxe com a cláusula TO extrai de uma tabela seus dados e os armazena em um arquivo texto. A sintaxe com FROM lê um arquivo texto, binário ou CSV (texto separado por vírgulas) para uma tabela.
O COPY pode ser empregado um comando Select ou cláusula Values para ganho de maior controle sobre os dados gravados/ lidos.
Adicionalmente pode substituir delimitadores nos arquivos gerados e definir caracteres que substituam valores nulos.
Exemplos de COPY de tabela para arquivo:
1 - Sintaxe que lê dados da tabela tstdel e os grava no arquivo teste.txt. Por padrão, o arquivo é criado em modo texto e a separação dos dados no arquivo gerado é feita por tabulações. Valores nulos são gravados como o caracter '\N'.
COPY tstdel TO 'c://teste.txt';
1 Teste1 2007-07-26 14:35:14
2 Teste2 2007-07-26 14:35:14
3 Teste3 2007-07-26 14:35:14
4 Teste4 2007-07-26 14:35:14
5 Teste5 2007-07-26 14:35:14
6 \N \N
2 - Usando o caracter '|' para separar os campos do arquivo gerado. A cláusula WITH é opcional.
COPY tstdel TO 'c://teste.txt' WITH DELIMITER '|';
1|Teste1|2007-07-26 14:35:14
2|Teste2|2007-07-26 14:35:14
3|Teste3|2007-07-26 14:35:14
4|Teste4|2007-07-26 14:35:14
5|Teste5|2007-07-26 14:35:14
6|\N|\N
3 - COPY gerando arquivo binário. O arquivo é criado mais rapidamente que em modo texto, mas a portabilidade pode ser menor entre versões do PostgreSQL ou em relação a outros bancos.
COPY tstdel TO 'c://teste.txt' BINARY;
4- A geração de arquivo pode causar problemas com valores nulos. Esta sintaxe troca valores nulos por um caracter "*".
COPY tstdel TO 'c://teste.txt' NULL '*';
5 - O COPY permite a escolha de um conjunto de colunas. Exemplo de cópia das colunas cod e nome.
COPY tstdel (cod, nome) TO 'c://teste.txt';
6 - Uso de select para definir os conjuntos de dados a serem copiados.
COPY (select * from tstdel where cod <= 500) TO 'c://teste.txt';
7 - Geração de arquivos em formato CSV.
COPY tstdel TO 'c://teste.txt' CSV;
8 - Geração de arquivos em formato CSV com HEADER, um cabeçalho com o nome das colunas.
COPY tstdel TO 'c://teste.txt' CSV HEADER;
cod,nome,date
1,Teste1,2007-07-26 14:35:14
2,Teste2,2007-07-26 14:35:14
3,Teste3,2007-07-26 14:35:14
4,Teste4,2007-07-26 14:35:14
5,Teste5,2007-07-26 14:35:14
Exemplos de COPY de arquivo (criado com COPY FROM) para tabela:
1 - Sintaxe que lê o arquivo teste.xtx e grava seus dados na tabela tstdel. Por padrão é feita a cópia de arquivo texto com um registro por linha, e campos separados por tabulações.
COPY tstdel FROM 'c://teste.txt';
2 - Sintaxe que lê e recupera um arquivo binário. Caso o arquivo lido não seja no formato esperado, é emitida mensagem de erro.
COPY tstdel FROM 'c://teste.txt' BINARY;
3 - Sintaxe que lê e recupera um arquivo de dados, trocando os valores '*' por nulos.
COPY tstdel FROM 'c://teste.txt' NULL '*';
4 - Exemplo que recupera apenas as colunas cod e nome.
COPY tst2 (cod, nome) FROM 'c://teste.txt';
5 - Definindo conjuntos de dados a serem copiados através de select. Uma cláusula VALUES também poderia ser empregada.
COPY (select * from tstdel where cod <= 500) FROM 'c://teste.txt';
6 - COPY Lendo arquivos CSV.
COPY tstdel FROM 'c://teste.txt' CSV;
7 - Lendo arquivos CSV com HEADER.
COPY tstdel FROM 'c://teste.txt' CSV HEADER;
Postado por Cláudio Leopoldino às 15:25 6 comentários:
Ferramenta de Modelagem - MicroOlap Database Designer for PostgreSQL - II
"Leandro Guimarães Faria Corcete DUTRA disse...
Ele suporta domínios, versionamento e vários SGBDs?"
Com relação ao questionamento do Leandro:
- A ferramenta Microolap apresenta um gerenciador/ construtor de domínios e tipos do usuário que facilita bastante a utilização destes recursos nos projetos. O que não encontrei que poderia ser adicionado foi uma biblioteca com alguns exemplos e tipos úteis. Fica como sugestão para eles.
- Não encontrei suporte a múltiplos bancos de dados. Pelo que constatei, cada diagrama pode conter apenas um database. É de certa forma uma limitação.
- O versionamento teria de ser feito através de ferrementa à parte, como Clearcase, CVL ou Source Safe, pois o MicroOlap mantém apenas uma versão dos modelos. O máximo que ele faz é criar uma "stamp", que apresentaria o versionamento do diagrama, mas neste caso a versão seria apenas um número ao qual pode ser acrescentado um auto incremento.
Postado por Cláudio Leopoldino às 13:51 Um comentário:
Ferramenta de Modelagem - MicroOlap Database Designer for PostgreSQL
Para quem gosta de trabahar organizadamente com modelagem de dados, o MicroOlap é um software com bons recursos. O "MicroOlap Database Designer for PostgreSQL" é um shareware baseado em java que pode ser utilizado por 30 dias (full version!).
A primeira impressão que tive foi muito positiva quanto ao seu uso:
- Facilidade de utilização e rica interface visual (auto layout, zoom, diagramas visuais)
- O Instalador é fácil de usar e não chega a ter 6 megabytes
- A Engenharia reversa intuitiva e funcional
- Geração de bancos de dados conforme o modelo criado de forma bastante prática.
- Interfaces para administração de índices, tabelas, colunas, domínios, tablespaces, visões, etc.
- Checagem automática de modelos, identificando warnings e errors relacionados aos objetos.
- Suporte às características específicas do PostgreSql com herança de tabelas.
O instalador pode ser baixado em:
A versão single user não está tão cara: $124.95 dólares.
Alguém está utilizando esta ferramenta em seus projetos? Quais são as suas impressões?
Postado por Cláudio Leopoldino às 10:59 5 comentários:
Quem como eu perdeu a PgCon da Itália, tem uma nova chance de participar.
Uma versão Nacional do evento máximo do nosso banco de dados será realizada em São Paulo. Preparem os cobres e as licenças para ir à cidade que nunca dorme dias 07 e 08 de dezembro.