2014-07-04 9:44 GMT-03:00 Flavio Henrique Araque Gurgel <[email protected]>:

> - IMMUTABLE: tudo que é uma computação direta dos parâmetros (como no
>> seu caso). E só deve fazer chamadas à outras funções IMMUTABLE.
>>
>
> Gostaria de adicionar aqui, IMMUTABLE significa principalmente que o
> resultado da função é sempre o mesmo dado um conjunto de parâmetros de
> entrada, o que permite por exemplo fazer um índice sobre uma expressão que
> usa a dita função.
>
>
Ok, está correto. Só tome cuidado com essa frase pois pode causar confusão,
devemos também adicionar a restrição de que não se deve basear-se em nenhum
parâmetro de configuração (muito comum por exemplo para timestamptz e a GUC
TimeZone).

>
>  - STABLE: basicamente tudo que faça consultas somente leitura no banco.
>> E só deve fazer chamada à outras funções que sejam IMMUTABLE ou STABLE.
>>
>
> E que seu resultado só varia a partir dos resultados da(s) leitura(s)
> feitas, e não dos parâmetros de entrada.
>
>
Não sei se ficou claro. Acho que você quis dizer: " E que seu resultado só
varia a partir dos resultados da(s) leitura(s) feitas **e** dos parâmetros
de entrada.". Ou ainda, "Que seu resultado, dados os mesmos parâmetros de
entrada, só variam caso o conjunto de dados das leituras mudem".


>
>  - VOLTILE: tudo que faça escrita ou seja baseado em parâmetros de
>> configuração. Pode chamar qualquer outra função (basicamente este tipo
>> de função é **sempre** chamada, não há otimização).
>>
>
> E cujo resultado pode ser diferente a cada vez que é executada


Daí a restrição de que qualquer função que, internamente, chame outra
função VOLATILE também é VOLATILE. Mas está correto sim, claro.

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a