- 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

Responder a