Re: [pgbr-geral] erro: cache lookup failed for relation
O que gera esse select é um aplicativo em C, a funcao que é chamada dento do arquivo C é em pltcl. Logo, voce esta sugerindo que eu fique dropando e criando a funcao em tcl a cada 5 min (no caso antes de executa-la) ? Só pra ficar mais claro, esse select, busca o nome de algumas views e de uma tabela temporaria. (c.relname ilike '%sincroniza_view' ). 2009/7/16 Euler Taveira de Oliveira eu...@timbira.com: jorge sanfelice escreveu: 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; Acho muito pouco provável o problema estar nesta consulta. São somente tabelas do catálogo e não temporárias. Você já experimentou carregar a sua função em C (aka DROP FUNCTION e CREATE FUNCTION) antes de invocá-la periodicamente? -- Euler Taveira de Oliveira http://www.timbira.com/ ___ 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
Re: [pgbr-geral] erro: cache lookup failed for relation
jorge sanfelice escreveu: O que gera esse select é um aplicativo em C, a funcao que é chamada dento do arquivo C é em pltcl. Logo, voce esta sugerindo que eu fique dropando e criando a funcao em tcl a cada 5 min (no caso antes de executa-la) ? Sim. Só pra ficar mais claro, esse select, busca o nome de algumas views e de uma tabela temporaria. (c.relname ilike '%sincroniza_view' ). Esse é o problema. O plano faz cache do OID da tabela temporária e na próxima execução ele _não_ encontrar a tabela temporária. -- Euler Taveira de Oliveira http://www.timbira.com/ ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] erro: cache lookup failed for relation
jorge sanfelice escreveu: 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; Acho muito pouco provável o problema estar nesta consulta. São somente tabelas do catálogo e não temporárias. Você já experimentou carregar a sua função em C (aka DROP FUNCTION e CREATE FUNCTION) antes de invocá-la periodicamente? -- Euler Taveira de Oliveira http://www.timbira.com/ ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] erro: cache lookup failed for relation
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
Re: [pgbr-geral] erro: cache lookup failed for relation
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
Re: [pgbr-geral] erro: cache lookup failed for relation
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 jorgesanfel...@gmail.com: 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
Re: [pgbr-geral] erro: cache lookup failed for relation
2009/7/15 jorge sanfelice jorgesanfel...@gmail.com: 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; Tente rodar este comando no psql para confirmar se é ou não um problema com seu banco. Osvaldo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] erro: cache lookup failed for relation
Eu rodei isso: 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; e funcionou normal. Como eu disse, nao é sempre que esse erro acontece e nao sei porque que acontece as vezes. tipo, rodando a cada 5 min o erro acontece 1 a 2 vezes no maximo a cada hora. 2009/7/15 Osvaldo Kussama osvaldo.kuss...@gmail.com: 2009/7/15 jorge sanfelice jorgesanfel...@gmail.com: 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; Tente rodar este comando no psql para confirmar se é ou não um problema com seu banco. 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