On Fri, 24 Nov 2006, Marcelo Costa wrote:
> Hi, all
>
> I migrate my database from 7.4 to 8.1.5 and make tests with aplication
> but this don´t works fine.
>
> Some trigers don´t work and send to me error messages as this:
>
> Warning: pg_query(): Query failed: ERROR: INSERT is not allowed in a
> non-volatile
> function CONTEXT: SQL statement "insert into
> ave.ave_aluno_avaliacao_diario_historico (
> codigo_ave_avaliacao , codigo_ave_aluno_caderneta , nota , presenca , falta ,
> data_cadastro , justificativa , codigo_usuario ) select codigo_ave_avaliacao ,
> codigo_ave_aluno_caderneta , nota , presenca , falta , data_cadastro ,
> justificativa ,
> codigo_usuario from ave.ave_aluno_avaliacao_diario where
> codigo_ave_aluno_caderneta = $1 and codigo_ave_avaliacao = $2 "
> PL/pgSQL function
> "func_trg_ave_aluno_avaliacao_diario_a_iu" line 16 at SQL statement in...(...)
>
> I see all trigers including func_trg_ave_aluno_avaliacao_diario_a_iu
> and compile this but no erros send to me.
>
> Anybory can help me or send to me any link to that it can clarify.
This looks to be from the following change in the 8.0 release notes:
"Functions declared STABLE or IMMUTABLE always use the snapshot of the
calling query, and therefore do not see the effects of actions taken after
the calling query starts, whether in their own transaction or other
transactions. Such a function must be read-only, too, meaning that it
cannot use any SQL commands other than SELECT."
You probably will need to redefine the functions to be volatile if
they're currently stable or immutable.