Se ajudar, o erro se da nesse momento:

Error: cache lookup failed for relation 251674995
COMMAND: SELECT c.relname, n.nspname FROM pg_catalog.pg_class c JOIN
pg_catalog.pg_roles r ON r.oid = c.relowner LEFT JOIN
pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN
('v','r') AND n.nspname NOT IN ('pg_catalog', 'pg_toast') AND
pg_catalog.pg_table_is_visible(c.oid) AND c.relname ilike
'%sincroniza_view'  ORDER BY 2;

2009/7/15 jorge sanfelice <[email protected]>:
> Prezados,
>
> Como eu faria o uso do "execute" para o meu caso?
>
> Tenho alguns cenarios.
> cenario 1: no momento em que sao "geradas" as tabelas temporarias.
> cenario 2: no momento em que sao "usadas" as tabelas temporarias
> (SELECT,UPDATE,INSERT)
>
> Outra duvida, eu faço o seguinte no tcl:
>
> spi_exec " SELECT .... INTO TEMP temp_tabela  FROM tabela1,tabela2 .... "
>
> Aguem poderia dar um exemplo de com fazer no execute dentro de uma
> funcao "tcl" ?
>
> Obrigado.
>
> 2009/7/15 Osvaldo Kussama <[email protected]>:
>> 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
>>
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a