quinta-feira, 29 de novembro de 2007

PostgreSQL BETA 3 Disponível para Testes

A versão beta do PostgreSQL Beta 3 foi lançada e está disponível no site postgresql.org. As funcionalidades estão definidas desde primeiro de abril, e as implementações e testes tem sido feitos desde então.

Existe grande expectativa para o lançamento da versão 8.3 pelo acréscimo de novas funcionalidades e recursos para melhor desempenho de aplicações críticas.

segunda-feira, 26 de novembro de 2007

PostgreSQL 8.3: Você Sabe o que são UUIDs?

Enquanto a versão 8.3 continua em testes, as novas funcionalidades ainda são desconhecidas para muitos dos usuários. Uma das inovações prevista é o uso de UUIDs.

O termo UUID (Universally Unique Identifier) nomeia identificadores que podem ser empregados por exemplo como substituição à chave primária das tabelas, servindo como alternativa aos campos tipo SERIAL do PostgreSQL e ao uso de OIDs.

Os OIDs (identificadores de objetos) do PostgreSQL não são recomendáveis para tabelas com muitos registros, mas o novo UUID promete suprir esta lacuna.

Também são chamados de GUIDs (Globally Unique Identifier), termo que também pode designar a implementação da Microsoft dos UUIDs em seus produtos.

A UUID é essencialmente um número de 16 bytes. Com 128 bits, a quantidade de registros que pode ser endereçada é enorme, viabilizando a sua utilização como identificador em grandas bancos de dados. O número de variações possíveis de UUIDs é de 216*8 = 2128 = 25616 ou cerca de 3.4 × 1038. Para dar uma idéia do tamanho deste número, basta afirmar que para se cobrir todas as possibilidades e exaurir um campo tipo UUID, teria de ser gerado 1 trilhão de UUIDs a cada nanosegundo por 10 bilhões de anos (o cálculo não é meu)!

Exemplo de UUID em Hehadecimal: 5f23d248-a353-4044-9e5a-04518ac20b94

Boas referências de código podem ser obtidas na Wikipedia. Outro site interessante é o GUID generator


quinta-feira, 22 de novembro de 2007

PostgreSQL em Evento do SERPRO



Esta semana ocoreu o I Forum de Software Livre do SERPRO (Serviço Federal de Processamento de Dados), organizado pelo comitê de Software Livre da Regional Curitiba.

O PostgreSQL foi a principal tecnologia de banco de dados abordada no evento, que foi aberto à comunidade e contou com a presença de estudantes universitários e funcionários públicos de diversas instituições como SANEPAR e CELEPAR. O evento contou com palestrantes de peso, como Bruno Sousa, vulgo "Javaman", e Richard Stallman, pioneiro mundialmente conhecido da área de Software Livre.

Com relação ao PostgreSQL, foi apresentada por mim a palestra "Portabilidade com PostgreSQL", além de dois mini cursos sobre as funcionalidades deste banco de dados.

O impulso do Software Livre, e particularmente da utilização do PostgreSQL se intensificou no SERPRO após a ascenção de Marcos Mazoni ao cargo de Diretor-Presidente da empresa, o que gera indícios da adoção em massa desta tecnologia nos projetos da instituição.




sexta-feira, 16 de novembro de 2007

Pesquisa Acadêmica com PostgreSQL

Chegou às minhas mãos um ótimo artigo relacionado com o PostgreSQL. Os pesquisadores Marcos Antonio Vaz Salles e Sergio Lifschitz estão trabalhando em configuração e otimização autônoma de banco de dados, entre outras áreas e este é apenas mais um dos trabalhos do grupo que envolve ainda outros pesquisadores (site do grupo de pesquisa).

O título, resumo, abstract e o e-mail dos autores se encontram abaixo.

Caso saibam de mais equipes de pesquisadores que trabalhem com PostgreSQL, e de bons artigos que possam ser divulgados, favor indicar!!!

Espera-se que a comunidade de desenvolvimento busque um contato maior com a academia, pois estes trabalhos poderiam ser incorporados ao PostgreSQL, mas por não serem conhecidos, ficam restritos à comunidade universitária.

Peço aos desenvolvedores brasileiros do PostgreSQL que entrem em contato, pois é uma forma de se incorporar a qualidade acadêmica brasileira no banco de dados que todos utilizamos.

Os autores que autorizaram este post salientaram que tudo o que é produzido é aberto, então vamos a eles!


==================================

Um Agente de Software para Criacão de Índices no PostgreSQL

Marcos Antonio Vaz Salles, Sergio Lifschitz

Departamento de Informática–Pontíficia Universidade Católica do Rio de Janeiro (PUC-Rio)

- sergio@inf.puc-rio.br
- Marcos Salles site pessoal com artigos e outras informações

Abstract. This paper briefly describes a prototype developed as part of a Masters thesis focused on autonomic index creation for database systems. The system is composed of a software agent that collects SQL commands submitted to the DBMS, analyzes which indexes are appropriate for those commands and automatically creates them. The analysis process uses server extensions that enable the creation of hypothetical indexes. The agent’s implementation was
done in C++ and integrated in the open source DBMS PostgreSQL. The server extensions made in PostgreSQL to simulate hypothetical index configurations were coded in C.

Resumo. Este artigo descreve brevemente um prototipo desenvolvido como parte de uma dissertação de mestrado focada na criação autônoma de índices em sistemas de bancos de dados. O sistema e composto de um agente de software que coleta comandos SQL processados pelo SGBD, analisa quais índices seriam adequados para estes comandos e os cria automaticamente. O processo de análise se utiliza de extensões codificadas no servidor para a criação de índices hipotéticos. A implementacão do agente foi realizada em C++ e integrada no SGBD de codigo fonte aberto PostgreSQL. As extensões feitas no PostgreSQL para simulação de configurações hipotéticas de índices foram escritas em C.

segunda-feira, 12 de novembro de 2007

Aqua Data Studio - Boa Ferramenta Visual...

O Aqua Data Studio é uma ferramenta proprietária para criação e administração de Bancos de Dados. Suporta Oracle, DB2 UDB, SQL Server, Sybase ASE, Sybase Anywhere, Sybase IQ, Informix, MySQL e PostgreSQL.

Um aluno me apresentou e não é que adorei a ferramenta? Apesar de limitada, oferece mais facilidades gráficas que o PgAdmin III para os iniciantes. A versão completa é a 6.5, mas a versão 4.7.2 pode ser baixada e utilizada academicamente e para fins pessoais. O suporte é pago, claro!

O site da empresa é o: http://www.aquafold.com/

Pontos Fortes (Versão 4.7):
- Facilidades para importação e exportação de dados
- Rica interface visual com bons editores, assistentes e query builder
- Aceitação de múltiplos SGBDs, incluindo o PostgreSQL
- Suporte disponível (Pago)
- Backup (pelo script generator)
- Bastante utilizada. O site indica mais de100 instituições que utilizam a ferramenta, indicando que seu aprimoramento continuará por muito mais tempo.

Pontos Fracos (V. 4.7):
- Instalador muito grande (48 megas!).
- Possui um gerador de diagramas de entidade-relacionamento, mas que não é muito flexível. Também parece exigir que se crie o banco para gerar o diagrama, e não o sentido inverso.
- Recursos de comparação de bancos de dados não disponíveis na versão gratuita. (bom, eles tem que faturar, né?)

Veja algumas telas capturadas:

- Editor de Funções
- Query Analyser


- Query Builder


- Diagrama de Entidade-Relacionamento Gerado pela Ferramenta. Cortesia de Marcelo Robson e Vilani Queiroz (SERPRO).

terça-feira, 6 de novembro de 2007

Banner da PgCon: Divulgue!


Lançado o banner promocional da PgCon brasileira. Esteja livre para colocá-lo no seu site, blog ou comunidade!

A PgCon promete ser o principal evento de PostgreSQL no país. Mais informações no site do postgresql.org.br. Link à direita!

Segunda Turma do "Meu Curso de PostgreSQL"!

Começou esta semana a segunda turma do "Meu Curso de PostgreSQL", aqui no trabalho. Eu sou o instrutor e trabalho com material próprio. Espero que venham novas turmas!

- 1a turma: 24h - Brasília - Agosto de 2007
- 2a turma: 40h - Fortaleza - Novembro de 2007

segunda-feira, 29 de outubro de 2007

Criação de Índices com Procedures no PostgreSQL...

Vamos ver se consigo ajudar. Esta é uma dúvida do Juliano Fischer:

"Ola, estou com um problema em uma implementação e creio que pode me ajudar.
Preciso criar um subprograma armazenado que crie um indice,se já existir, informar o usuario, cado contratio, crie um indice.

criaIndice(campo,tabela);"

Não é tão difícil! A solução está abaixo, mas cuidado pois o meu código pode e deve ser melhorado. Nomes de parâmetros, métodos e variáveis e bons comentários podem ser adicionados.

Além disso, o exemplo só verifica um campo e exige que se tenha cuidado na nomenclatura dos campos, pois utiliza a cláusula LIKE.

1 - Recuperar informações dos índices.

A dica é utilizar a pg_indexes, visão de sistema mais amigável para saber se o índice existe:

select * from pg_indexes;

2 - Criar uma função parametrizada que indica se os índices existem. Observem que utilizei a linguagem SQL, e não Pl/ PgSql. Poderia utilizar qualquer outra liguagem, mas a lógica seria similar.

-- Verifica se existe o índice. Retorna ZERO se o índice não for encontrado
CREATE OR REPLACE FUNCTION retindex(in tabela varchar, in campo varchar) RETURNS bigint AS $$
select count(*) from pg_indexes where tablename = $1 and indexdef like '%' || $2 || '%'
$$
LANGUAGE SQL;


3 - Criar função parametrizada que cria o índice caso o mesmo não exista, e que utilize a função anterior. Linguagem Pl/ PgSQL.

-- Verifica e cria novo índice se for o caso
CREATE OR REPLACE FUNCTION criaindex (tabela varchar, campo varchar) RETURNS VARCHAR AS $$
DECLARE
func_cmd VARCHAR;
BEGIN
if retindex($1,$2) > 0 then
RETURN 'OK';
else
func_cmd := 'CREATE INDEX ' || $1 || '_IDX ON ' || $1 || ' (' || $2 || ')';
EXECUTE func_cmd;
RETURN func_cmd;
end if;
END;
$$ LANGUAGE plpgsql;

4 - Testando tudo

select retindex ('teste','c1');
select criaindex ('teste', 'c1');

Companheiros, quem pode dar um código que melhore ainda mais esta criação de índices com função armazenada? Juliano, resolvi seu problema?

sexta-feira, 19 de outubro de 2007

A Função DATE_PART

Esta utilíssima função retorna parte de uma data, hora ou timestamp para manipulação. É bastante prática e utilizada nas aplicações PostgreSQL. Equivale à função EXTRACT.

Aceita como parâmetros um texto com a parte da data a ser extraída e outro parâmetro com a data/ hora/ timestamp da qual será extraída parte.

Sintaxe:
1- date_part(text, timestamp) double precision
2 - date_part(text, interval) double precision

Exemplos:

1 - Date_part com current_date. Retornando dia da semana, dia, mês e ano.

SELECT date_part('dow', current_date); --DAY OF WEEK
SELECT date_part('day', current_date);
SELECT date_part('month', current_date);
SELECT date_part('year', current_date);

2 - Data_part com current_date retornando dia da semana, dia, mês e ano na mesma linha.

SELECT date_part('day', current_date) as dia, date_part('month', current_date) as mês, date_part('year', current_date) as ano;

3 - Data_part com current_time.

SELECT date_part('hour', current_time);
SELECT date_part('minute', current_time);
SELECT date_part('second', current_time);
SELECT date_part('milliseconds', current_time);

4 - Data_part com current_time retornando hora, minuto, segundo e milésimos de segundo em uma só linha.

SELECT date_part('hour', current_time), date_part('minute', current_time), date_part('second', current_time), date_part('milliseconds', current_time);

5 - Date_part com current_timestamp.

SELECT date_part('dow', current_timestamp);
SELECT date_part('day', current_timestamp);
SELECT date_part('month', current_timestamp);
SELECT date_part('milliseconds', current_timestamp);

6 - Date_part com current_timestamp, retornando dia da semana, dia, mês e os milisegundos da hora corrente.

SELECT date_part('dow', current_timestamp), date_part('day', current_timestamp), date_part('month', current_timestamp), date_part('milliseconds', current_timestamp);

7 - Date_part com conversão da string para campos data/ hora/ timestamp.

SELECT date_part('day', date '12-12-2007');
SELECT date_part('month', date '12-12-2007');
SELECT date_part('hour', time '02:12:45');
SELECT date_part('minute', time '02:12:45');
SELECT date_part('year', timestamp '12-12-2007 02:12:45');
SELECT date_part('hour', timestamp '12-12-2007 02:12:45');

8 - Sintaxes utilizando interval.

SELECT date_part('year', interval '4 years 3 months');
SELECT date_part('month', interval '4 years 3 months');
SELECT date_part('hour', interval '12 hour 10 minutes 12 seconds');
SELECT date_part('minute', interval '12 hour 10 minutes 15 seconds');
SELECT date_part('second', interval '12 hour 10 minutes 15 seconds');

quinta-feira, 11 de outubro de 2007

Ótimo Livro Brasileiro de PostgreSQL!!!



O livro "Dominando o PostgreSQL", de Jorge Luiz Gonzaga, cobre as principais funções do banco, desde a instalação até a construção de funções e triggers. É uma ótima opção para quem utiliza versões 8.X. Não costumo comentar livros, mas ele tem se revelado uma ótima fonte.

Ficha técnica:
- Dominando o PostgreSQL
Autor: Gonzaga, Jorge Luiz
Editora: Ciência Moderna
ISBN: 9788573935592
Idioma: Português
Páginas: 244
Publicação: 2007
Edição: 1
Encadernação: Brochura
Peso: 512.00 gramas (!)

Pontos fortes:
- Grande Abrangência. São 36 capítulos falando de quase todos os aspectos desta tecnologia, incluindo instalação Linux e Windows.
- Suporte à linguagem SQL bastante detalhado, com muitos exemplos de sintaxes alternativas que aumentama produtividade.
- Cobre as versões 8.x, o que a maioria dos livros nacionais ainda não faz.

Pontos fracos:
- Ausência de índice remissivo (aquele que fica no fim da página)
- Certos temas mereciam maior detalhamento, como o WAL - Write-Ahead Log.
- O livro como um todo poderia ter textos mais detalhados. Os capítulos são muito curtos e os textos diretos demais, resultando em poucas páginas por capítulo.

Conclusão: é um ótimo livro. Não conheço melhor livro em português. E você?

segunda-feira, 8 de outubro de 2007

PostgreSQL 8.3 Beta Liberado para Testes

Não recomendada para uso comercial, estas versão aguarda que você faça seu download e testes. Ah, você já pode baixar na página do programa de beta testes do PostgreSQL: Seja um Beta Tester.

Novas funcionalidades:
- Melhorias de desempenho como alterações para o Distributed Checkpoint, Commit Assíncrono entre outros recursos
- TSearch2 para busca em texto passa a ser integrada ao código e sintaxe mais amigável. (Possível tema para próximos posts)
- SQL:XML syntax. (Precisa de comentário? Tenho de testar isso logo!!!)
- Logging para arquivos CSV carregáveis no banco.
- Rebuilding automático de planos de execução de consultas em cache. (ótima idéia de melhoria de desempenho)
- ENUMs, UUIDs and arrays of tipos complexos.
- Suporte de autenticação para GSSAPI e SSPI. (o que diabos é isso?)

Podemos colaborar bastante baixand, testando o beta e encaminhando as alterações.

Documentação completa das novidades nas Release Notes.

quinta-feira, 4 de outubro de 2007

A Função TIMEOFDAY

A função timeofday() retorna um texto com a data e hora. Não é muito utilizada.

Exemplos:

1 - Sintaxe básica.

select timeofday();
Retorno: "Thu Oct 04 12:33:55.953000 2007 BRT"