quinta-feira, 29 de maio de 2008

Uso de SET em Funções Pl/PgSQL

Na versão 8.3 do PostgreSQL foi implementado um recurso interessante, que permite a parametrização da execução de uma função utilizando o comando SET no momento da sua criação. Desta forma, a configuração é alterada apenas durante a sua execução, retornando aos valores prévios após o seu encerramento.

Valores de tablespace padrão (default_tablespace), encoding do cliente (client_encoding) entre outros são definidos de forma explícita, de modo que se force o comportamento esperado da função não importando que programa faça a sua chamada de execução.

Existe também a opção de utilização da cláusula FROM CURRENT para fazer com que a alteração de configuração seja mantida após a execução da função.

Nem todos os parâmetros de execução podem ser alterados com o comando SET dentro de uma função. Os erros são revelados no momento de criação da função.

O comando SHOW mostra a lista de parâmetros e seus valores correntes.

Criação de Função com Parâmetros de Configuração

O código abaixo mostra a criação de uma função que atualiza a tabela salário. Após o corpo da função são definidos os valores dos itens de configuração array_nulls, default_tablespace, commit_delay e client_encoding.

CREATE TABLE SALARIO (cod integer PRIMARY KEY, provento real);
INSERT INTO SALARIO VALUES (1, 1000.00);
INSERT INTO SALARIO VALUES (2, 100.00);

CREATE OR REPLACE FUNCTION salario_aumento() RETURNS BOOLEAN AS $
BEGIN
UPDATE SALARIO SET provento = provento * 1.1;
RETURN true;
END;
$ LANGUAGE plpgsql
SET array_nulls = OFF
SET default_tablespace = 'pg_default'
SET commit_delay TO 10
SET client_encoding TO UNICODE;

Mantendo Alterações na Configuração

O código abaixo mostra a criação de uma função na qual é alterado e mantido o valor do client_encoding. A cláusula FROM CURRENT indica que parâmetro terá o valor de configuração que foi alterado mantido.

CREATE OR REPLACE FUNCTION salario_parametros() RETURNS BOOLEAN AS $
BEGIN
UPDATE SALARIO SET provento = provento * 1.1;
RETURN true;
END;
$ LANGUAGE plpgsql
SET client_encoding TO UNICODE
SET client_encoding FROM CURRENT;

Ressalva no Uso de SET em Funções

Alguns dos itens de configuração não são alteráveis pelo comando SET dentro de uma função. Neste caso, será retornado erro no ato da criação da função. No exemplo abaixo, tanto o log_checkpoints quanto o transaction_isolation não puderam ser alterados no escopo de uma função.

-- Não funcionaram
CREATE OR REPLACE FUNCTION salario_parametros_teste() RETURNS BOOLEAN AS $
BEGIN
UPDATE SALARIO SET provento = provento * 1.1;
RETURN true;
END;
$ LANGUAGE plpgsql
SET log_checkpoints = ON
SET transaction_isolation = SERIALIZABLE;

ERROR: parameter "log_checkpoints" cannot be changed now

********** Error **********

ERROR: parameter "log_checkpoints" cannot be changed now
SQL state: 55P02


quarta-feira, 14 de maio de 2008

Acessando o PostgreSQL a partir do OpenOffice Base com SDBC

O BrOffice Base é um banco de dados com características similares às do Microsoft Access. Dentre seus recursos, a interface com o usuário e os vários assistentes e funcionalidades de interface para a criação de tabelas, consultas, formulários e relatórios diversos tornaram esta ferramenta uma boa e produtiva opção para implementadores.

No entanto, bancos como o PostgreSQL apresentam maior robustez e recursos de gerenciamento. Você pode utilizar no seu projeto a produtividade do Base com a robustez do PostgreSQL. A integração é simples e neste texto é mostrada a integração via SDBC - Star(Office) DataBase Connectivity. Outras opções de midlleware de conexão seriam JDBC, ODBC e unixodbc. Cada uma destas tecnologias têm suas vantagens e limitações que estão fora do escopo deste texto.

O SDBC é um padrão que tem sido atualizado constantemente, daí a ser um dos mais empregados, ao lado do JDBC, tendo a vantagem de ser desatrelado à tecnologia Java.

1 - Instalação do Driver SDBC

Fazer o Download do Driver SDBC no site http://dba.openoffice.org/drivers/postgresql/index.html. No meu caso, criei uma pasta e fiz o download do arquivo compactado para:
C:\Program Files\PostgreSQL\8.3\SDBC.

A instalação do SDBC Driver pode ser feita pelo Writer ou outro programa do BrOffice. Todos os demais programas (de apresentações, planilha, etc.) poderão utilizá-lo. Selecione no menu menu Ferramentas\ Gerenciador de extensão... (Tools\Extension Manager)


Clique no botão adicionar e indique o caminho do arquivo compactado com o driver. Selecione o arquivo que você baixou e o BrOffice vai adicionar o driver.

2 - Configuração do Base para a Conexão.

Após instalar o driver, deve ser reiniciado o BrOffice para que o mesmo apareça para o BrOffice Base. A partir daí será possível a conexão.
Abra o Base e selecione a opção de conexão a um banco de dados existente. Desta forma, você ingressará em um assistente de conexão bem simplificado. Após a instalação do driver SDBC aparecerá em uma grande lista de opções o driver do PostgreSQL.


Após selecionar o PostgreSQL e disparar próximo, aparecerá um campo para digitação de parâmetros. Entre com o host e o nome do banco. Abaixo, os valores testados no exemplo.

host=localhost dbname=teste


Na próxima tela, é definido o usuário do PostgreSQL que vai conectar-se via Base. Este usuário deve estar previamente cadastrado e com as permissões necessárias. Ainda existe a opção de testar a conexão.
Não desmarque a opção de senha obrigatória a não ser que haja uma boa razão. De outro modo, a segurança do seu SGBD estará em risco.


Na última tela do assistente, se escolhe se o banco de dados passa a ser registrado na ferramenta. Em caso afirmativo, o Base vai gravar um arquivo de configurações para reutilização. Você pode gravá-lo na pasta do driver SDBC ou em outro lugar para melhor gerenciamento.


3 - Utilização

Após a conexão via assistente, o Base vai abrir a tela e mostrar os esquemas e objetos do PostgreSQL com a sua própria interface visual. É uma maneira de trabalhar com banco de dados de forma produtiva, pois é possível criar formulários e relatórios de forma rápida e simples, acessível a leigos, por exemplo. Para maiores detalhes, procurar por bons sites de BrOffice Base.

4 - Ressalvas

Os outros middlewares para conexão devem ser explorados por possuírem vantagens/ desvantagens diferentes do SDBC. Praticamente todos apresentam bugs conhecidos e limitações.

A questão de como utilizar o potencial do BrOffice Base está em aberto. A criatividade e adesão dos usuários é que vai fazer ou não este casamento frutificar.