quarta-feira, 29 de dezembro de 2010

Uma Leitura Diferente: Teses e Dissertações Sobre PostgreSQL

Está sem idéias para o seu projeto de monografia? Está procurando alguma leitura mais aprofundada sobre banco de dados? Para encontrar a solução para estas questões, a Biblioteca de Teses e Dissertações do IBICT (Instituto Brasileiro de Informação em Ciência e Tecnologia) é uma boa opção.

Sua base de dados possui um acervo de pesquisas que engloba áreas como administração, medicina, psicologia e ciência da computação. Fiz uma busca e encontrei 16 documentos relacionados sobre o Postgres e o número tende a crescer.

Nos textos referentes ao Postgres a qualidade dos textos é relativamente boa e a ferramenta é extendida pela implementação de complementos, explorada como ferramenta de desenvolvimento e comparada com outras ferramentas. Os textos apresentam sugestões de novas pesquisas nas suas considerações finais. RECOMENDO!

quarta-feira, 22 de dezembro de 2010

PgDay 2011 em Cuba: Chamada de Trabalhos

Uma boa oportunidade para conhecer Cuba é a terceira edição do seu PgDay. A chamada de trabalhos está aberta até o dia 10 de janeiro. O evento está marcado para os dias 1 a 5 de fevereiro de 2011. Mais informações aqui.

Existem muitas curiosidades sobre a comunidade cubana de Postgres que tornam este evento atraente e peculiar. Por ser um país socialista, as decisões são tomadas por consenso em comitês. A necessidade de adotar tecnologias mais acessíveis fez com que o Postgres nos últimos anos se tornasse um dos bancos de dados mais adotados no país, e o google insights mostra que a terra de Fidel atualmente é o país que mais faz buscas sobre o Postgres no mundo todo (o Brasil está em décimo lugar no mesmo levantamento).

O PgDay cubano é mais formal que o da maioria dos países e tem forte presença estatal. A chamada de trabalhos é bem detalhada, pedindo artigos escritos com rigor para registro nos anais do evento. Os melhores textos para uma edição especial da "Revista Cubana de Ciencias Informáticas".

Os interessados devem se apressar, pois o prazo é bem curto!

quinta-feira, 16 de dezembro de 2010

Tenha os Manuais de Referência do PostgreSQL!

É sempre bom poder consultar fontes robustas de conhecimento para melhor conduzir este projeto. As "Bíblias do Oracle" ou as grandes compilações de APIs do Windows são algumas das publicações que muito me ajudaram. No caso do Postgres, os manuais disponibilizados na web sao a referência mais atual e a mais referenciada. No entanto, para muitos de nós a pesquisa em livros é mais prazeroza, e instituições de ensino e empresas ainda utilizam muito material em papel para pesquisas.

A gráfica britânica "Network Theory LTS" é uma empresa especializada em editoração e impressão de manuais de software livre como Python e CVS e está disponibilizando a documentação do Postgres 9.0.1 na forma de quatro livros. Os preços são relativamente baixos e parte do valor arrecadado vai para a comunidade de desenvolvimento do PostgreSQL (1 dolar por livro).

Abaixo coloco as referências:

- The PostgreSQL 9.0 Reference Manual - Volume 1A - The SQL Language
by The PostgreSQL Global Development Group
ISBN 978-1-906966-04-1, Price $19.95 (£14.95)


-The PostgreSQL 9.0 Reference Manual - Volume 1B - SQL Command Reference
by The PostgreSQL Global Development Group
ISBN 978-1-906966-05-8, Price $19.95 (£14.95)


- The PostgreSQL 9.0 Reference Manual - Volume 2 - Programming Guide
by The PostgreSQL Global Development Group
ISBN 978-1-906966-06-5, Price $19.95 (£14.95)


- The PostgreSQL 9.0 Reference Manual - Volume 3 - Server Administration Guide
by The PostgreSQL Global Development Group
ISBN 978-1-906966-07-2, Price $14.95 (£9.95)

Acesse o site aqui e não se esqueça de avaliar também o custo do frete do material antes de fazer qualquer compra!

segunda-feira, 8 de novembro de 2010

Postgresql 9.1 em pleno desenvolvimento!

O Postgresql 9.1 em pleno desenvolvimento e procurando mais testadores. A versão 9.1 está atualmente em sua segunda versão alfa, com evoluções da versão 9.0. As novas mudanças envolvem features de segurança, sql e recursos de administração e performance.


Conheça as funcionalidade aqui: http://developer.postgresql.org/pgdocs/postgres/release-9-1-alpha.html

Participe dos testes clicando aqui!

quarta-feira, 6 de outubro de 2010

Catálogo do Postgres: uma imagem vale por mil palavras!

Compreender os metadados de um SGBD é a forma mais direta de saber como encontrar informações sobre o estado dos bancos de dados de um servidor. No caso do PostgreSQL, as várias tabelas e visões do sistema nem sempre são conhecidas pelo desenvolvedor, o que pode gerar problemas.

A imagem abaixo sintetiza o catálogo do Postgres em sua versão 8.3, apresentando uma visão geral das relações entre as tabelas de metadados. O diagrama não está compĺeto, por terem sido omitidos alguns dos atributos das relações e faltam visões de sistema como PG_TABLES e PG_LOCKS, mas me parece uma iniciativa pioneira para abrir estas informações para um público maior.

A imagem foi encontrada neste site peruano. Caso alguém conheça mais sobre a origem desta imagem e seu(s) autor(es) ou saiba de outra que englobe mais informação ou versões mais novas do Postgres, não deixe de me avisar!!!



segunda-feira, 4 de outubro de 2010

A Cláusula CASE

O uso de expressões condicionais dentro de SQL permite a geração de resultados mais claros sem a necessidade de se programar dentro do código das aplicações as condições a serem verificadas.

A cláusula CASE permite que os valores  retornados pelas consultas possam ser modificados caso sejam compatíveis com determinadas expressões de forma relativamente simples:

CASE WHEN condition THEN result
[WHEN ...]
[ELSE result]
END 


A cláusula CASE aceita uma condição consiste em uma expressão simples e retorna o valor que consta após a cláusula THEN, caso a condição seja satisfeita. Podem ser utilizados opcionalmente mais de um WHEN  no comando e a cláusula ELSE que é disparada quando nenhuma das condições do case seja satisfeita.

Abaixo, os comandos de criação de duas tabelas e a inserção de dados que serão utilizados para os exemplos de sintaxe:

CREATE TABLE VALORES (val INTEGER);
INSERT INTO VALORES VALUES (1);
INSERT INTO VALORES VALUES (2);

CREATE TABLE SIGNOS (val CHAR(1));
INSERT INTO SIGNOS VALUES ('A');
INSERT INTO SIGNOS VALUES ('T');
INSERT INTO SIGNOS VALUES ('G');

INSERT INTO SIGNOS VALUES ('X');

Sintaxe 1: Caso o valor numérico corresponda à condição, retorna uma string explicativa.


SELECT val,
CASE
    WHEN val=1 THEN 'Primeiro'
    WHEN val=2 THEN 'Segundo'
    ELSE 'Não Classificado'
END
FROM VALORES;


val |   case  
-----+----------
   1 | Primeiro
   2 | Segundo
(2 registros)


Sintaxe 2: Testa se o valor numérico é par ou ímpar e retorna uma string explicativa.



SELECT val,
CASE
    WHEN val%2=1 THEN 'Ímpar'
    WHEN val%2=0 THEN 'Par'
END
FROM VALORES;


val | case 
-----+-------
   1 | Ímpar
   2 | Par
(2 registros)

Sintaxe 3: O valor reTesta se o valor numérico é par ou ímpar e retorna uma string explicativa.


SELECT val,
CASE
    WHEN val='A' THEN 'Primeiro'
    WHEN val='T' THEN 'Segundo'
    WHEN val='G' THEN 'Terceiro'
    ELSE 'Não Classificado'
END
FROM SIGNOS;


 val |       case      
-----+------------------
 A   | Primeiro
 T   | Segundo
 G   | Terceiro
 X   | Não Classificado
(4 registros)


Nota: para condições mais complexas e que tomem muito tempo de processamento, pode ser criada uma função armazenada, que realiza as verificações de um case.

segunda-feira, 20 de setembro de 2010

Habemus Postgresql 9.0!!!

Lançada oficialmente a  versão 9.0 do Postgresql, com novas funcionalidade e recursos para escalabilidade a muito tempo esperados! Atualize sua versão aqui!


Boa oportunidade para quem deseja estudar banco de dados e para quem já trabalha com a ferramenta de fazer uma atualização no servidor!

Abaixo, coloco o texto do lançamento, toscamente traduzido do inglês:


O PostgreSQL 9.0 chegou! O Grupo de Desenvolvimento Global do ostgreSQLanuncia a disponibilidade do nosso lançamento mais aguardado. 
PostgreSQL 9.0 inclui replicação binária "built-in" e mais de uma dúziaoutras características importantes voltadas a todos os desenvolvedores, de web hackers a administradores de banco de dados.
A versão 9.0 inclui funcionalidades mais importantes do que qualquer liberação antes dela, incluindo:* Hot standby* Streaming Replication* Atualizações In-Place*
Versões para Windows 64-bit * Fácil gerenciamento de permissões em massa* Blocos anônimos de código e nomeação de chamadas de parâmetros  para procedimentos armazenados
* Novas "Window Functions" e ordenação de agregados
... e muito mais alterações. Para mais detalhes sobre as mais de 200 adições emelhorias nesta versão, desenvolvida por mais de uma centena de colaboradores, consulte as notas de lançamento.

segunda-feira, 30 de agosto de 2010

PostgreSQL Beta 4 Lançado!

Liberada nova versão de teste do Postgresql, a beta 4.

Vamos continuar testando e reportando problemas!

Notas de lançamento da versão aqui! Download aqui!

Coloque o PostgreSQL no seu Navegador!


Esse é uma dica para quem gosta de personalizar o seu computador com temas e papéis de parede.

O Personas é um complemento do navegador Firefox que permite a fácil instalação de temas. Também é possível criar a sua própria skin para o firefox, de uma forma relativamente fácil, embora demore alguns dias para a mesma passar pelo processo de aprovação. É uma oportunidade para exercer toda a sua criatividade e personalizar sua máquina!

Existem temas sobre filmes, personagens de anime, artistas e sobre softwares e é muito fácil escolher e aplicar novas opções sem afetar o desempenho do navegador. O linux, por exemplo, tem dezenas de opções!

Até a semana passada, não havia nenhum sobre o Postgres e criei o primeiro, penando muito no uso do Gimp: "PostgreSQL Simple", que aparece na imagem que ilustra este post. Espero que apareçam em breve outras opções mais criativas :)

Problemas:
- Preferível para o Firefor 3.6.* em diante, não estando disponível para outros navegadores como IE.

quarta-feira, 14 de julho de 2010

Boa Apostila de Introdução ao Postgres

Encontrei uma apostila de postgres bem simples de 2005, ainda referente à versão 7.*, mas ao mesmo tempo bastante concisa e prática para quem está aprendendo ou ensinando. Baixe o pdf aqui.

Não consegui maiores informações sobre a autora, Vanessa Rocha Solgate.

Você sabe de alguma outra apostila que possa ser referenciada?

Atualização: Fecharam o acesso à apostila. :(

Tentativas de acesso geram a mensagem: "You don't have permission to access /gs/treinamento/graduacao/apostilaPostgre.pdf on this server.". 

Colocarei em breve mais links para outros materiais que não sejam privados à medida em que for descobrindo.

quarta-feira, 7 de julho de 2010

PostgreSQL Feature Matrix!

Você sabe a partir de que versão o Postgres implementa a cláusula RETURNING ou cursores atualizáveis? Essas informações são importantes para a compatibilidade entre as várias versões do SGBD, assim como para acompanhar a evolução da ferramenta a cada ciclo de desenvolvimento, e estão disponíveis na PostgreSQL Feature Matrix!

Atualmente a matriz de funcionalidades oficial do postgres apresenta as mudanças originadas nas versões 7.48 até 9.0, beta 2.







segunda-feira, 31 de maio de 2010

PostgreSQL 9.0: Quais são as novidades? A visão das "funcionalidades da semana" - Parte 2!

O PostgreSQL está em sua quarta versão alfa, e começam a aparecer indicações das novas funcionalidades e alterações que foram introduzidas. O informe semanal "PostgreSQL Weekly News", organizado por David Fetter apresenta uma seção chamada "Feature of the Week", ou funcionalidade da semana, descrevendo uma alteração em desenvolvimento. Os informes originais podem ser consultados aqui.

Abaixo listo as últimas funcionalidades citadas, agregando algum comentário quando pertinente:

31/05/2010 - Esta semana não teve "funcionalidade da semana". Nas colunas anteriores a coluna era escrita por David Fetter e Devrim GUNDUZ, mas o segundo não participou da coluna desta semana. Pode ser que a feature of the week volte, ou não...

23/05/2010 - Objetos grandes (lo_ *) agora possuem controles de acesso, como os demais objetos do banco de dados. É mais um fator positivo para a utilização de LOBs em geral.

16/05/2010 - O utilitário pg_ctl agora tem uma opçao initdb. Esta opção inicializa um servidor postgres. Mais informações aqui.

09/05/2010 - Você pode criar triggers por coluna, ou seja, que são disparads somente na modificação das colunas especificadas. Recurso utilíssimo!!!

A sintaxe, como descrita no SQL: 2008, é: CREATE TRIGGER trigger_name (BEFORE | AFTER) UPDATE OF col1 [,] ... ON col2 coln tablename FOR EACH ROW trigger_function PROCESSO EXECUTE ();

02/05/2010 - Agora você pode chamar funções com parâmetros nomeados, por exemplo, parameter_bar foo ('valor' AS parameter_foo, o valor 'outro' AS).

Recurso muito prático se você lembra o nome dos os parâmetros, mas não a ordem em que estão na declaração da função.

25/04/2010 - Funções podem agora ter valores padrão para parâmetros. Ótima e simples idéia!!!

18/04/2010 - GUCs agora são reguláveis por função e por banco de dados.

Você sabe o que é GUC? Global User Configuration (GUC) são configurações de servidor do arquivo postgresql.conf. Poder definir parâmetros de servidor para cada função é ter mais flexibilidade. Mas a forma como isso será implementado não parece clara ainda.

11/04/2010 - "You can now GRANT and REVOKE on objects schema-wide in a single command".

Mais recursos para configurar permissões de acesso, desta vez afetando todo o esquema do banco com apenas um comando. Faltam mais detalhes.

04/04/2010 - Existe agora um comando chamado ALTER DEFAULT PRIVILEGES, o qual permite o ajuste de privilégios que serão aplicados a objetos a serem criados no futuro.

É uma opção boa para préconfigurar os objetos do banco de dados utilzando grant e revoke para tabelas, sequências e funções.

01/04/2010 - "Distributed map-reduce functions in Erlang". Desconsiderem todo anúncio da equipe do Postgres feito no primeiro de abril!!!



terça-feira, 20 de abril de 2010

Erros de "Permission Denied na Criação de Tablespaces"

Em muitos casos os problemas que mais incomodam são os mais simples. No caso do Postgresql, um problema bem comum mas que causa estresse é a falta de permissão para a criação de tablespaces.

Tablespaces permitem um maior controle sobre a localização física dos dados, metadados, índices e estatísticas do banco. Informações sobre criação de tables paces podem ser obtidas aqui. O postgresql utiliza o sistema de arquivos fornecido pelo sistema operacional, o que muitas vezes gera problemas de autorização de acesso que impedem a sua criação, o clássico erro "permission denied".

Neste post vamos mostrar como definir corretamente as permissões para criação de tablespaces em ambiente windows.

Passo 1: Criar pasta do tablespace.
Crie uma pasta sem arquivos dentro para a definição do novo tablespace.

Passo 2: Abrir tela de configuração
Entre no Windows Explorer e acione o menu "Ferramentas/ Opções de Pasta...".
O sistema apresentará uma tela com as opções de pasta.
Desmarque a opção "Usar Compartilhamento Simples de Arquivo (Recomendado)" e confirme a operação. Isso habilitará a aba de segurança das pastas, que serrá utilizada para definir as permissões para a criação do tablespace.

Passo 3: Configuração da segurança da pasta
Na pasta criada para o tablespace, clique com o botão direito e acione o menu “Propriedades”.

Em seguida, clique na aba segurança.

Na tela apresentada, clique em “Adicionar”. Aparecerá uma tela como a que aparece abaixo. Defina o local (no botão "Locais") e, no nome do objeto, coloque o usuário do banco que vai ter acesso ao tablespace. Confirme com o botão “OK”.

Na aba de segurança aparecerá o novo usuário. Marque a opção de “Controle Total”, o que fará com que o banco de dados possa efetivamente acessar o tablespace.


Passo 4: Criação do tablespace.

Utilize para isso o comando CREATE TABLESPACE.


Este post teve contribuição de Jeferson Gallina.

segunda-feira, 8 de março de 2010

PostgreSQL 9.0: Quais são as novidades? A visão das "funcionalidades da semana" - Parte 1!!!

O PostgreSQL está em sua quarta versão alfa, e começam a aparecer indicações das novas funcionalidades e alterações que foram introduzidas. O informe semanal "PostgreSQL Weekly News", organizado por David Fetter apresenta uma seção chamada "Feature of the Week", ou funcionalidade da semana, descrevendo uma alteração em desenvolvimento. Os informes originais podem ser consultados aqui.

Abaixo listo as últimas funcionalidades citadas, agregando algum comentário quando pertinente:

28/03/2010 - Implementação do conceito de blocos anônimos de código (anonymous code blocks) através do comando DO nas linguagens PL/pgsql, PL/Perl, e PL/LOLCODE.

Estes blocos compreendem comandos que podem ser executados em um bloco de código sem um nome, utilizando as poderosas linguagens procedurais do PostgreSQL. Desta forma podem ser executados blocos de código sem que se precise criar funções dentro do banco. Parece uma ótima forma de se criar scripts.

O exemplo abaixo eu peguei aqui:

DO $$DECLARE r record;
BEGIN
FOR r IN SELECT table_schema, table_name FROM information_schema.tables
WHERE table_type = 'VIEW' AND table_schema = 'public'
LOOP
EXECUTE 'GRANT ALL ON ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ' TO webuser';
END LOOP;
END$$;

21/03/2010 - Campos do tipo Hstore não tem mais o limite de 64kB para o limite de chaves e suportam árvore B e classes de operadores hash, permitindo GROUP BY, DISTINCT, etc.

Obs: Você sabe por acaso o que é HSTORE? Eu também não sabia, mas é um módulo que implementa um tipo de dados chamado HSTORE que agrega ao mesmo tempo uma chave e um valor, ambos strings. Este novo tipo de dado é útil para uma série de cenários. Mais informações podem ser obtidas aqui.

14/03/2010 - Em PL/pgsql, o comando MOVE agora funciona de forma compreensível com Cursores.

Obs: Não deu para entender o problema que havia antes, mas este comando reposiciona o cursor sem recuperar dados (NEXT, PRIOR, FIRST, LAST, ABSOLUTE count, RELATIVE count, FORWARD, ou BACKWARD).

07/03/2010 - A saída do EXPLAIN pode ser formatada como XML, JSON, YAML e o mecanismo de análise está muito mais simples. O formato tradicional de texto ainda é o formato padrão.

Obs: Os novos formatos permitem a definição de relatórios e ferramentas de análise dos resultados do comando Explain, facilitando a otimização de consultas.

28/02/2010 - A suíte pgbench agora é multi-threaded, o que lhe permite tirar partido de múltiplos núcleos de CPU.

Obs: O pgbench é um utilitário que faz o benchmark de desempenho do servidor. Pode ser utilizada para testes de estresse, carga e performance. O uso de múltiplas threads faz com que os resultados sejam mais confiáveis e obtidos em menor tempo.

21/02/2010 - Agora você pode controlar o comportamento de valores distintos para cada coluna com ALTER TABLE ALTER COLUMN ... ... SET (parâmetro = valor ,...) onde parâmetro pode ser uma das n_distinct e n_distinct_inherited. Valores positivos são assumidos como sendo o número de valores distintos aceitos, 0 diz que o planejador da consulta deve utilizar os resultados do comando ANALYZE, e os números negativos (que devem estar entre -1 e 0) fazem com que o planejador estime o número de valores distintos como o número de linhas multiplicado pelo valor absoluto do número.

Obs: Funcionalidade de performance, para consultas específicas.

14/02/2010 - Violações de restrição de unicidade de valor agora geram mensagens de erro mais detalhadas.

Obs: Agora fica mais fácil encontrar a causa de exceções de valores repetidos e como resolvê-las.

31/01/2010 - A checagem de constraints de não repetição de valores pode agora ser adiada até a hora do commit.

Obs: Funcionalidade de performance, para consultas específicas.

24/01/2010 - A sintaxe DROP IF EXISTS agora trabalha em colunas e restrições.

Obs: Sintaxe interessante para os desenvolvedores de ferramentas de banco de dados.

17/01/2010 - O Vacuum full foi alterado para gerar novos arquivos para tabelas e índices por padrão. Esta implementação é baseada no antigo comando CLUSTER e mais eficiente e efetiva. A funcionalidade antiga do VACUUM FULL ainda pode ser acessada através do comando VACUUM FULL INPLACE, mas será incompatível com o Hot Standby.

Obs: O Vacuum Full Implace só parece ser vantajoso para sistemas com pouco espaço em disco. A nova Implementação promete ganho de tempo nas manutenções de banco.

10/01/2010 - Agora você pode armazenar em log o estado de consultas SQL, erros, etc, usando "%e" na sua log_line_prefix.

03/01/2010 - No psql o uso de "\d" agora mostra quantas tabelas herdadas uma tabela-mãe tem, e "\d+" lista os nomes das tabelas herdadas.

Obs: Alteração de pouco impacto para quem não utiliza recursos objeto-relacionais.

27/12/2009 - Hot Standby. Após 1,5 anos de desenvolvimento, você pode finalmente executar consultas somente leitura PITR contra os escravos. Graças ao Simon Riggs, Heikki Linnakangas, qualquer muitos outros esforços incessantes.

Obs: O melhor uso de hardware promete ganho de desempenho e redução de custos para grandes sistemas escaláveis e resistentes a falhas. Esta é uma das funcionalidaes que merecerá bastante atenção dos DBAs.

20/12/2009 - Cláusulas WHEN sobre Triggers. Na versão 8.5 Alpha3 você será capaz de criar triggers com uma cláusula WHEN para que as mesmas executem apenas se os valores ou condições específicas ocorrerem. Graças Itagaki Takahiro e a equipe da NTT.

Obs: Esta alteração permite triggers mais específicas com menos validações internas, possivelmente impactando positivamente seu desempenho.

13/12/2009 - Constraints de exclusão (por Jeff Davis) permitem que você especifique como únicos "dados" que abranjam um intervalo, como uma área geométrica, um período de tempo, ou um array.

Obs: Função importante para quem trabalha com lógicas de negócios no banco de dados.

Abaixo, a redação oficial da coluna:

07/03/2010 - EXPLAIN output can be formatted as XML, JSON, and YAML, making machine parsing much simpler. The traditional text format is still the default format.

28/02/2010 - The pgbench suite is now multi-threaded, allowing you to take advantage of multiple CPU cores.

21/02/2010 - You can now control the behavior of distinct values per column using ALTER TABLE...ALTER COLUMN...SET (parameter=value,...) where parameter can be one of n_distinct and n_distinct_inherited. Positive numbers are assumed to be the number of distinct values, 0 tells the planner to use the results from ANALYZE, and negative numbers (which should be between -1 and 0, cause the planner to estimate the number of distinct values as the estimated number of rows multiplied by the absolute value of the number.

14/02/2010 - Uniqueness violations now raise more detailed error messages.

31/01/2010 - Uniqueness constraints can now be deferred until commit time.

24/01/2010 - The DROP IF EXISTS syntax now works on columns and constraints.

17/01/2010 - VACUUM FULL has been changed to now generate all-new files for the vacuumed table and indexes. This is based on the old CLUSTER command, and is both more efficient and more effective. The old functionality of VACUUM FULL can still be accessed via VACUUM FULL INPLACE, but will be incompatible with Hot Standby.

10/01/2010 - You can now log SQL state for queries, errors, etc., using %e in your log_line_prefix.

03/01/2010 - In psql, \d now shows how many inherited tables a parent has, and \d+ lists them.

27/12/2009 - Hot Standby. After 1.5 years of development, you can at last run read-only queries against PITR slaves. Thanks to Simon Riggs, Heikki Linnakangas, any many others for unceasing efforts.

20/12/2009 - WHEN clauses on Triggers. In 8.5Alpha3, you will be able to create triggers with a WHEN clause so that they will only execute if specific values or conditions occur. Thanks Itagaki Takahiro and the NTT team.

13/12/2009 - Exclusion Constraints (by Jeff Davis) allow you to specify as "unique" data which covers a range, such as a geometric area, a period of time, or an array.

O que acharam destas novas funcionalidades?

Elas impactarão o seu trabalho atual?

quinta-feira, 4 de março de 2010

Acompanhe o Status do Servidor no PgAdmin III

Acompanhar os acessos ao banco de dados é uma necessidade para quem lida com aplicações de maior porte. O PgAdmin III apresenta um bom painel que premite acompanhar o servidor, mostrando as conexões, bloqueios, transações correntes e o arquivo de log de auditoria.

O recurso pode ser utilizado através do menu "Ferramentas/ Status do Servidor". Abaixo, uma visualização da tela apresentada.


segunda-feira, 1 de março de 2010

DreamCoder for PostgreSQL: Ferramenta Visual

Uma das maiores queixas dos profissionais de banco de dados é a falta de ferramentas visuais robustas.


As opções abertas contribuem para reduzir este problema, mas ainda apresentam deficiências e lacunas de importantes funcionalidades que restringem sua utilização e difusão. Ao mesmo tempo, versões freeware de softwares comerciais podem ser úteis em virtude de suas funcionalidades, apesar de não terem seu código disponibilizado.


O DreamCoder for PostgreSQL é uma opção freeware que promete facilitar o trabalho com este banco de dados uma rápida análise da ferramenta mostrou pontos fortes e deficiências importantes. O software pode ser baixado aqui.


Abaixo, uma tela com a interface da ferramenta.




O editor de plpgsql apresenta bons recursos de formatação que promovem a produtividade.
Vide imagem abaixo.



Pontos Fortes:

- Versão Freeware (a Enterprise pode ser baixada com )
- Atualização Recente (02 de 2010)
- Bom editor de Pl/ PgSQL
- Bons recursos visuais para visualização e navegação nos objetos do banco, mostrando propriedades e dependências.
- Configuração de autosubstituição de caracteres.

Pontos Fracos:

- Não apresenta funções de engenharia reversa e importação.
- Não apresenta assistentes para a criação de tabelas, índices e outros objetos do banco, que devem ser manuseados via DDL, função básica em qualquer ferramenta visual de desenvolvimento.
- Ausência de versão para Linux
- Falta de recursos mais avançados, restritos à versão entreprise.


Resultado geral:

É uma ferramenta boa para os usuários da plataforma Windows que utilizem muito código Pl/ PgSQL. As futuras versões podem trazer avanços mais significativos. Só deve ser utilizada após testes criteriosos. A versão entreprise não foi avaliada neste post.

Versão Alfa do PostgreSQL 9.0 Lançada!

A versão de desenvolvimento ALFA do PostgreSQL 9.0 está disponível para downloads e testes.

Na verdade, é a quarta versão alfa, uma vez que três versões anteriores haviam sido lançadas como sendo para o PostgreSQL 8.5.

Faça o download aqui!

Veja as notas de lançamento com os avanços desta versão aqui!

sexta-feira, 19 de fevereiro de 2010

Select - Cláusulas FOR UPDATE, FOR SHARE e NOWAIT

Influenciar nos mecanismos de bloqueio do banco de dados nem sempre é um processo intuitivo. No entanto, pode ser bastante útil para garantia da confiabilidade de resultados e para ajustes de desempenho.

A existência de bloqueios sobre os dados acessados durante o acesso concorrente não pode ser ignorada em sistemas com grande número de transações concorrentes mesmo no Postgres que utiliza o protocolo de bloqueios multiversão (MVCC - MultiVersion Concurrency Control). 

O PostgreSQL oferece algumas cláusulas relativamente simples que permitem este tipo de controle no caso de consultas no banco de dados: FOR UPDATE, FOR SHARE e NOWAIT.

O uso de consultas com a cláusula FOR UPDATE obriga o servidor a bloquear os registros consultados para leitura e escrita durante o transcorrer da transação. Desta forma se garante que o que está sendo visualizado corresponde ao que está armazenado no banco de dados.

Por sua vez, a cláusula FOR SHARE efetua bloqueio de escrita, mas permite que leituras sejam feitas aos dados consultados.

Em resumo, a cláusula FOR UPDATE restringe os acessos aos dados consultados, enquanto que a FOR SHARE explicitamente autoriza acessos de leitura aos dados consultados. O tipo de transação é que determina se e quando utilizar estas cláusulas.

É importante salientar que ambas as cláusulas se referem apenas os dados que são recuperados na consulta.

Adicionalmente, a cláusula NOWAIT pode ser utilizada tanto com FOR UPDATE quanto com FOR SHARE, e força a ocorrência de erro caso o servidor tenha de esperar para a obtenção de bloqueios nos dados consultados. Desta forma, sacrifica-se a transação para que não se perca tempo na fila de espera por bloqueios.

As cláusulas UNION, INTERSECT e EXCEPT até o momento não são compatíveis com FOR UPDATE e FOR SHARE.

Para os próximos exemplo, serão utilizadas as seguintes tabelas:

CREATE TABLE pai (codpai integer,nomepai varchar(50));
CREATE TABLE filho (codpai integer,codfilho integer,nomefilho varchar(50));

Exemplos:

1 - Sintaxe simples com FOR UPDATE.

SELECT * FROM pai FOR UPDATE;

2 - Sintaxe simples com FOR SHARE.

EXPLAIN SELECT * FROM pai FOR SHARE;

3 - Uso de FOR SHARE em consulta com junção.

SELECT *
FROM pai p, filho f
WHERE p.codpai = f.codpai
FOR SHARE;

4 - Uso de NOWAIT.

SELECT * FROM pai FOR UPDATE NOWAIT;

5 - Uso de FOR UPDATE em transação de atualização.

BEGIN;
SELECT * FROM pai FOR UPDATE;
UPDATE pai SET nomepai = nomepai ' Father';
COMMIT;

quarta-feira, 27 de janeiro de 2010

Algoritmos: Caixa de Banco Simulado no PostgreSQL

Ao retirar dinheiro de um caixa eletrônico, solicitamos uma quantia e o caixa decide quantas notas de cada tipo disponível nós receberemos. O algoritmo que faz esta decisão é relativamente simples.

Abaixo coloco uma função que recebe uma solicitação de dinheiro e calcula quantas notas de 100, 50, 10, 5 e 1 serão retornadas ao solicitante:

--Retornando notas do caixa eletrônico
--Notas de 1, 5, 10, 50 e 100
CREATE OR REPLACE FUNCTION caixa_elet (pvalor integer) RETURNS text AS $$
DECLARE
sretorno text;
qnota1 integer;
qnota5 integer;
qnota10 integer;
qnota50 integer;
qnota100 integer;
BEGIN
sretorno := '';
qnota100 := (pvalor - (pvalor % 100))/100;
qnota50 := ((pvalor % 100) - (pvalor % 50)) /50;
qnota10 := ((pvalor % 50) - (pvalor % 10)) /10;
qnota5 := ((pvalor % 10) - (pvalor % 5)) /5;
qnota1 := ((pvalor % 5) - (pvalor % 1)) /1;
sretorno := 'Total: ' || pvalor || chr(10) || 'Notas de 100:' || qnota100 || chr(10) || 'Notas de 50:' || qnota50 || chr(10) || 'Notas de 10:' || qnota10 || chr(10) || 'Notas de 5:' || qnota5 || chr(10) || 'Notas de 1:' || qnota1;
RETURN sretorno; -- Retorna as linhas
END;
$$ LANGUAGE plpgsql;

Chamada da função e resultado apresentado:

SELECT caixa_elet(1078);

"Total: 1078
Notas de 100:10
Notas de 50:1
Notas de 10:2
Notas de 5:1
Notas de 1:3"

SELECT caixa_elet(2189);

"Total: 2189
Notas de 100:21
Notas de 50:1
Notas de 10:3
Notas de 5:1
Notas de 1:4"

Agora, gostaria de fazer algumas perguntas para os programadores de plantão:
- O código da função caixa_elet está correto?
- O código da função caixa_elet pode ser melhorado de que formas?
- Que alterações seriam necessárias para acrescentar notas de 20?

Aguardo suas contribuições nos comentários!

quinta-feira, 21 de janeiro de 2010

8.5 sai de cena antes de ser lançado: nova versão do Postgres será a 9.0!

O anúncio não é oficial, mas a versão 8.5 terá sua numeração alterada para 9.0. Os testes e o desenvolvimento continuam normalmente.

As razões envolvendo a mudança compreendem o aumento das funcionalidades da nova versão e da abrangência das alterações no código, o grande tempo desde a primeira versão 8.* e um benefício em termos de marketing, pela insinuação de uma mudança mais substancial refletida na alteração de 8.4 para 9.0.

Você concorda com essa atitude?

terça-feira, 5 de janeiro de 2010

PostgreSQL e JDBC: Ótimo exemplo de código!

A utilização de linguagem java nas aplicações com PostgreSQL depende de um middleware para o acesso aos dados. O JDBC oferece conexões com segurança e confiabilidade. Mas como implementar estes acessos?

O link abaixo apresenta um ótimo exemplo introdutório de código java para acesso ao Postgres via JDBC. Confira aqui.