Posts Taggedpostgres

Postgres PLPGSQL Functions + Tabelas Temporárias

A alguns dias atrás precisei criar uma função no postgres que fazia inserções e consultas em uma tabela temporária que deveria ser criada dentro da função. Acontece que só funcionava na primeira execução, depois disso sempre me retornava algum erro na tentativa de criar a tabela novamente. Eu precisava de uma instrução que tem no SQL Server e que me parece não ter no postgres – “Exists” e “ObjectExists”. Bom, na falta .. dar-se um jeito. A solução que encontrei é usar o controle de exceções para dinâmicamente criar a tabela temporária caso ela ainda não exista na sessão.

– TESTA SE A TABELA JÁ FOI CRIADA NA SESSÃO

EXECUTE ‘SELECT * FROM tabela_tmp OFFSET 1′;

– SE NÃO EXISTIR, A EXCEÇÃO É DISPARADA E ENTÃO CRIA-SE A TABELA TEMPORÁRIA

EXCEPTION
WHEN undefined_table THEN
CREATE TEMPORARY TABLE tabela_tmp (
campo_1 INTEGER,
campo_2 VARCHAR(30)
) ON COMMIT DROP;
END;

Problema resolvido :)

Abraços

Add comment Dezembro 17, 2008

PostgreSQL + JasperServer / Transaction Read Only

Em breve devo fazer um post dedicado ao iReport e ao JasperServer. Um excelente solução para desenvolver relatórios para web com ferramentas open sources … masssss, pra quem já usa e teve ou está tendo dor de cabeça com o driver jdbc para postgresql e transações, vai ai minha dica :) .

Meu Cenário

Tenho uma view que recebe os dados vindo de uma função que faz inserts em lote numa tabela (temporária) e no final da transação esses dados são excluídos.

Problema

Como a transação está definida como somente leitura (em algum lugar das profundezas dos milhares de arquivos de configuração do Java) a operação de insert/delete não é permitida e você ganha uma exception :)

Nas configurações do JasperServer, num dos inumeros arquivos de configuração e pastas do Java, deve existir um lugar onde você pode definir que a transação não é somente leitura. Bom, eu não “falo” java fluente e tive muita dificuldade em resolver o problema. Cansei de tentar achar a tal propriedade na sopa de letrinhas (JNDI, JDBC, BEAN, JSF, J2EE, etc) e resolver procurar a solução do outro lado … no banco. E não é que funcionou????

Basta na sua função/procedure colocar:
SET TRANSACTION READ WRITE;

Mais infos: http://www.postgresql.org/docs/8.1/interactive/sql-set-transaction.html

2 comments Agosto 26, 2008


 

Dezembro 2009
S T Q Q S S D
« Out    
 123456
78910111213
14151617181920
21222324252627
28293031  

Arquivos

Tópicos recentes

Tags

Addfont apache Aplicações audio bash Carreira desabilitado desativado Desktop diminuir Documento emprego Encoding Firefox FPDF Gerenciador Google GTK+ HDA iconv iReport Jasper jasperserver Java Linux MakeFont mudo mysql Partição PDF Perl PHP postgres procedure redimensionar Relatorio script shell shrink SLACKWARE som ttf2pt1 vaga Vista Windows

Categorias

Blogroll