sexta-feira, 3 de julho de 2009

Case PgBouncer 1.3 com PostgreSQL 8.2

Pessoal,

Estou finalizando a implantação do PgBouncer 1.3 com PostgreSQL 8.2 e obtive excelentes resultados só pelo fato de colocar o Pool de Conexões na frente do "postmaster".

Até aqui não temos nada de muito surpreendente a não ser pelo fato de que, segundo a documentação do próprio PgBouncer fala que podemos ter 100% de transparência com o PostgreSQL 8.3 pelo fato do comando "DISCARD" estar presente apartir dessa release.

Como na versão que estamos utilizando, a 8.2, não existe essa implementação então o jeito foi implementar uma PL que "emule" o comportamento do "DISCARD".

Através da lista de discussão da Comunidade Brasileira de PostgreSQL (pgbr-geral), com a ajuda do colega Euler, implementei uma PL para suprir essa falta conforme segue:

create or replace function fc_discard_all() returns void as
$$
declare
rComando record;
iVersao integer;
begin

select cast(setting as integer)
into iVersao
from pg_settings
where name ~ 'server_version_num';

if not found then
raise exception 'A versão do PostgreSQL deve ser >= 8.2';
end if;

if iVersao >= 80300 then
execute 'discard all';
return;
end if;

set session authorization default;

reset all;

for rComando in
select name
from pg_prepared_statements
loop
execute 'deallocate '||rComando.name;
end loop;

for rComando in
select name
from pg_cursors
where name not like '%unnamed%'
loop
execute 'close '||rComando.name;
end loop;

unlisten *;

perform pg_advisory_unlock_all();

for rComando in
select distinct
table_schema,
table_name
from information_schema.tables
where table_type = 'LOCAL TEMPORARY'
loop
execute 'drop table if exists '||quote_ident(rComando.table_schema)||'.'||quote_ident(rComando.table_name)||' cascade';
end loop;

return;
end;
$$
language plpgsql;

No meu arquivo de configuração do pool (pgbouncer.ini) fiz o seguinte:

server_reset_query = SELECT fc_discard_all()


Os únicos efeitos colaterais dessa solução são:
  1. Se a base de dados que for acessada não tiver a PL acima criada vai gerar um log de erro, mas não impacta em problemas na conexão
  2. Não foi possível implementar uma emulação para o DISCARD PLANS pois, segundo o colega Euler, esse comando veio em conjunto com a funcionalidade de invalidação de planos em funções procedurais, logo não pode ser emulada em versões menores que 8.3
Tive de implementar esse recurso pois preciso descartar tabelas temporárias e outros recursos que são utilizados pela minha aplicação.

O modo do pool que estou utilizando é o "session" pois preciso da sessão do inicio ao fim com o mesmo estado.

Se alguém tiver alguma dica e/ou critica estou a disposição.


Cordialmente,

Fabrízio de Royes Mello
fabriziomello [at] gmail.com

quarta-feira, 1 de julho de 2009

PostgreSQL 8.4 Lançado

Há poucas horas foi aunciado na lista pgsql-announce, pelo Sr. Josh Berkus, o lançamento versão 8.4 do PostgreSQL.

Mais informações e a nota oficial de lançamento traduzidas podem ser encontradas em:

http://www.postgresql.org/about/press/presskit84.html.br


Cordialmente,

Fabrízio de Royes Mello
fabriziomello [at] gmail.com

Compilando o pgAdmin 1.10.0 no Ubuntu 9.04

Ontem (30/06/2009) como já anunciado no blog foi liberada a nova versão do pgAdmin, entretanto ainda não foram disponibilizadas versões compiladas do mesmo para Linux.

Então para instalar não teve jeito, tive de fazer download dos fontes e compilar e para isso tive de seguir os seguinte passos:

1) Instalar os pré-requisitos

sudo apt-get install build-essential
sudo apt-get install libxml2-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install libxslt1-dev
sudo apt-get install postgresql-server-dev-8.3
sudo apt-get install libwxbase2.8-dev
sudo apt-get install libwxgtk2.8-dev

2) Download do pgAdmin

http://www.pgadmin.org/download/


3) Descompactar os fontes

tar xzvf pgadmin3-1.10.0.tar.gz


4) Compilar e instalar

cd pgadmin3-1.10.0
./configure --with-pgsql=/usr/lib/postgresql/8.3 --prefix=/usr/local/pgadmin3
make
make install


5) Agora basta executá-lo

/usr/local/pgadmin3


Uma peculiaridade é que no meu caso tenho o PostgreSQL 8.3 instalado no meu Desktop então utilizei o pacote de desenvolvimento desta versão, mas creio que não exista problema algum em utilizar versões anteriores como a 8.2 ou 8.1.

Outro detalhe é que apesar de eu estar utilizando o Ubuntu 9.04 esse processo deve ser o igual para versões anteriores e até mesmo para o próprio Debian.

Fazendo isso temos o nosso pgAdmin 1.10.0 pronto para ser utilizado, bem simples e rápido.


Cordialmente,

Fabrízo de Royes Mello
fabriziomello [at] gmail.com

Disponibilizado pgAdmin v1.10.0

Pessoal,

Após mais de um ano de desenvolvimento foi disponibilizada a tão esperada versão 1.10.0 do pgAdmin.

Algumas das novas funcionalidades dessa versão:
  • Construtor Gráfico de Consultas (Graphical Query Builder)
  • Motor de Scripts na ferramenta de consulta (pgScript)
  • Suporte melhorado para Postgres Plus Advanced Server e Greeplum Database
  • Suporte a "Full Text Search"
  • Mecanismo para integração com ferramentas de terceiros
  • Suporte para PostgreSQL 8.4
Vejam a nota oficial do lançamento:

http://www.postgresql.org/about/news.1107


Cordialmente,

Fabrízio de Royes Mello
fabriziomello [at] gmail.com

Palestra Database Refactoring com PostgreSQL - URCAMP Alegrete/RS

Ontem (30/06/2009) ministrei a palestra de Database Refactoring para os alunos do Curso de Informática da Universidade da Região da Campanha (URCAMP) de Alegrete/RS.

O evento contou com a presença de alunos dos últimos semestres do Curso de Informática bem como de alguns docentes do Curso.

Os slides da palestra estão disponíveis em:

http://www.slideshare.net/fabriziomello/database-refactoring-postgresql-urcamp-alegrete-2009

As fotos também estão disponíveis em:

http://picasaweb.google.com/fabriziomello/UrcampAlegreteRS2009

Agradeço o convite feito pelos professores Cristian Talles e Eveline Guerra bem como a todos que participaram do evento, para mim foi uma honra trocar conhecimento com todos vocês.


Cordialmente,

Fabrízio de Royes Mello
fabriziomello [at] gmail.com