2009/7/15 jorge sanfelice <[email protected]>:
> Prezados,
>
> Estou com o seguinte erro:
> Error: cache lookup failed for relation 251285909
>
> Pesquisando no google achei o seguinte:
>
>> Leia [1]. Isso ocorre porque o PostgreSQL faz cache do conteúdo das
>> funções (inclusive o OID da tabela temporária referenciada), então ao
>> executar novamente, ele tenta utilizar a tabela temporária antiga.
>> Na versão 8.3 (próxima), isso não ocorrerá mais.
>>
>> [1] http://www.postgresql.org/docs/faqs.FAQ_brazilian.html#item4.19
>>
>
> E la diz o seguinte:
> Em versões do PostgreSQL < 8.3, PL/PgSQL armazena o conteúdo da
> função, e o efeito indesejado é que se uma função PL/PgSQL acessa uma
> tabela temporária, e aquela tabela é removida e criada novamente, e a
> função é chamada novamente, a função irá falhar porque o conteúdo
> armazenado da função ainda apontará para a tabela temporária antiga. A
> solução é utilizar o EXECUTE para acesso a tabelas temporárias no
> PL/PgSQL. Isto irá fazer com que a consulta seja avaliada toda vez.
>
> Esta versao que estou usando é a 8.2 (linux 64 mandriva).
>
> A sincronizacao é feita por um programa em "C" que esta agendado para
> rodar no "cron" a cada 5 min, sempre é uma conexão nova.
>
> Dentro desse arquivo em uma determianada parte chama uma funcao que
> uso pra sincronizacao em "tcl" que faz o seguinte:
>
>
>     #CRIA UMA TABELA TEMPORARIA temp_tabela COM OS DADOS BASICOS P/ A
> SINCRONIZACAO
>     spi_exec " SELECT .... INTO TEMP temp_tabela  FROM tabela1,tabela2 .... "
>
> depois cria outra tabela temporaria:
>
> spi_exec "create temp table temp_xxx (....);
>
> e dados sao manipulados nessas tabelas.
>
>
> Depois de executada essa funcao, fica uma tabela temporaria disponivel
> para esse programa em "C" que usa ela posteriormente e faz select's,
> etc....
>
> Em determinados momentos, tipo uma vez a cada hora, (essa
> sincronizacao roda a cada 5 min) esta acontecendo o erro "cache lookup
> failed for relation".
>
> Como posso resolver isso?
>


Utilize EXECUTE.
http://www.postgresql.org/docs/8.2/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a