Tenho uma função com uma consulta bastante pesada e preciso fazer cálculos
em cima do resultado dela. Pensei que colocando como stable e reutilizando
ela no código eu fosse calcula-la apenas uma vez. Mas a performance estava
proporcional ao número de vezes que chamava a função.

Coloquei também um RAISE NOTICE na função e as mensagens aparecem várias
vezes na saída, confirmando que a função está sendo executada diversas
vezes.

Um forma de contornar isso é com uma solução longe de ser a ideal. Utilizar
OFFSET 0 nas subconsultas que utilizam a função, desta forma, o otimizador
de consulta "materializa" o resultado, e utiliza posteriormente toda vez que
chamamos a função.

Em 25 de outubro de 2011 10:11, Marcone <[email protected]> escreveu:

> Em 25 de outubro de 2011 08:36, Pedro Ivo Bispo França
> <[email protected]> escreveu:
> >
> > Pessoal, tenho algumas funções declaradas como STABLE, que estão sendo
> executadas várias vezes no statement e segundo a documentação, isso não
> deveria acontecer...
>
> > .......
> >  As funções nestes exemplos serão executadas duas vezes, quando
> "deveriam" ser executadas apenas uma vez e o resultado ser aproveitado nas
> demais chamadas da função.
>
>
> Como você está verificando isso??
>
>
> --
> Marcone Peres - DBA
> http://www.linkedin.com/in/marconeperes
> (61) 8146-0028
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>



-- 
Pedro Ivo Bispo de França
X-Brain - Desenvolvimento de Sistemas Ltda
Contato: +55 43 3304-2204 | +55 43 9608-3678
Avenida Tiradentes, 501 Sala 702 Torre 1 - Jd. Shangrilá
Londrina - Paraná - 86070-545
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a