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