- 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.
- 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.
- 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, exemplos:
random()
now()
Portanto, uma função que pegue um parâmetro de entrada como um número
inteiro e o multiplica por random() (o que é uma "computação direta")
retornará uma valor diferente a cada chamada, mesmo se tiver sempre o
mesmo número inteiro na entrada, portanto ela é obrigatoriamente VOLATILE.
http://www.postgresql.org/docs/9.1/static/sql-createfunction.html
[]s
Flavio Gurgel
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral