Exemplificando o que falei no post anterior:

SELECT func, func + 1 FROM
                (
                 SELECT fnc_stable(34) as func
                 OFFSET 0
                ) AS foo

Dessa forma, a função só vai ser executada uma vez.

Em 25 de outubro de 2011 10:40, Pedro Ivo Bispo França
<[email protected]>escreveu:

> 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
>



-- 
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