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 <osvaldo.kuss...@gmail.com>: > 2009/7/15 jorge sanfelice <jorgesanfel...@gmail.com>: >> 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 > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > _______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral