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