Thread: Function ERRO after UPGRADE from 7.4 to 8.1.5
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. Thanks, Marcelo Costa Secretaria Executiva de Educação do Pará Amazônia - Pará - Brazil -- Marcelo Costa
"Marcelo Costa" <marcelojscosta@gmail.com> writes: > 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 What do you find unclear about the error message? It was never a sane idea to try to modify the database in a function marked immutable or stable, because of the risk that the side-effects would get optimized away. 8.1 enforces that, where older versions did not. regards, tom lane
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.
Thanks, its works. [],s Marcelo. 2006/11/24, Stephan Szabo <sszabo@megazone.bigpanda.com>: > 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. > -- Marcelo Costa