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
