Em 6 de agosto de 2013 10:22, Marcelo da Silva <marc...@ig.com.br> escreveu:
> Fabio, desculpa aproveitar da sua bondade, mas como cuido de muita coisa
> aqui, fica meio dificil assimilar algumas coisas no postgres, sei que para
> isso seria bom fazer um cursinho, mesmo que rápido em DBA Postgres, mas
> "sabcome né", então eu lhe pergunto quais as diferenças entre IMMUTABLE,
> VOLATILE, e STABLE ?
> Li no manual, mas confeço que fiquei meio confuso, pois ele se refere a
> dados vindos de tabelas ou não, e ao mesmo tempo cita que os dados podem ser
> mudados ou não, não compreendi, pois na minha concepção a volatilidade dos
> dados dependeriam dos dados de entrada também, então o que torna uma função
> volatil ou não ? Pelo meu ver toda função seria volatil, a menos que se
> guardasse o resultado em alguma variavel ou tabela, sei lá...

Vamos lá...

Uma função é imutável se os dados que ela vai retornar dependem apenas
dos dados passados na chamada da função. Ou seja: você pode alterar os
dados de qualquer tabela que o resultado da função não muda. Imagine
que você chame a função soma(x + y). Não importa o conteúdo das suas
tabelas, se x= 2 e y=3 o resultado sempre será 5. Sacou?

Uma função estável consulta dados de uma ou mais tabela, mas não altera nada.

Uma função volátil como atualiza_estoque(item, quantidade) já realiza
um UPDATE, INSERT ou DELETE em algum tabela.

Saber classificar direito uma função é importante, pois o Postgres
conseguem otimizar de maneira mais agressiva funções estáveis e
imutáveis. No entanto se você tiver uma função volátil criada com
imutável, ela não vai funcionar direito.
-- 
Atenciosamente,
Fábio Telles Rodriguez
blog: http://savepoint.blog.br
e-mail / gtalk / MSN: fabio.tel...@gmail.com
Skype: fabio_telles

Timbira - A empresa brasileira de Postgres
http://www.timbira.com.br
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Reply via email to