Error in trigger after upgrading to 8.0.1?
I have just upgraded to 8.0.1 from 7.4.6 and now my triggers doesn't work. When I insert a
row in a table that has an insert trigger, I get the following error msg:
ERROR: INSERT is not allowed in a non-volatile function
What does this mean?
Regards,
BTJ
--
-----------------------------------------------------------------------------------------------
Bj�rn T Johansen
btj@havleik.no
-----------------------------------------------------------------------------------------------
Someone wrote:
"I understand that if you play a Windows CD backwards you hear strange Satanic messages"
To which someone replied:
"It's even worse than that; play it forwards and it installs Windows"
-----------------------------------------------------------------------------------------------
Bj�rn T Johansen wrote:
I have just upgraded to 8.0.1 from 7.4.6 and now my triggers doesn't
work. When I insert a row in a table that has an insert trigger, I get
the following error msg:ERROR: INSERT is not allowed in a non-volatile function
What does this mean?
That is highly documented in the PGSQL 8.0 documentation. That exactly
means that a function that is not VOLATILE (such as STABLE, IMMUTABLE)
can't make any changes in tables (INSERT, UPDATE, DELETE). For such
operations, it MUST be VOLATILE. So, re-create (or REPLACE) your
functions, that do make any changes in tables with VOLATILE option set up.
Best regards,
Andrey V. Semyonov
Bjørn T Johansen wrote:
I have just upgraded to 8.0.1 from 7.4.6 and now my triggers doesn't
work. When I insert a row in a table that has an insert trigger, I get
the following error msg:ERROR: INSERT is not allowed in a non-volatile function
What does this mean?
Regards,
BTJ
It would appear as though the function in question was not created as a
VOLATILE function (i.e. it was created with the STABLE or IMMUTABLE
attribute).
Can you try and:
CREATE OR REPLACE FUNCTION function_name ...... AS $$
<your function def>
$$ LANGUAGE plpgsql VOLATILE;
Sven Willenberger
=?ISO-8859-1?Q?Bj=F8rn_T_Johansen?= <btj@havleik.no> writes:
I have just upgraded to 8.0.1 from 7.4.6 and now my triggers doesn't work. When I insert a
row in a table that has an insert trigger, I get the following error msg:
ERROR: INSERT is not allowed in a non-volatile function
What does this mean?
Just what it says. What are you doing declaring that trigger function
as immutable (or stable), when it has side effects?
regards, tom lane
Bj�rn T Johansen wrote:
I have just upgraded to 8.0.1 from 7.4.6 and now my triggers doesn't
work. When I insert a row in a table that has an insert trigger, I get
the following error msg:ERROR: INSERT is not allowed in a non-volatile function
What does this mean?
Regards,
BTJ
It would appear as though the function in question was not created as a
VOLATILE function (i.e. it was created with the STABLE or IMMUTABLE
attribute).Can you try and:
CREATE OR REPLACE FUNCTION function_name ...... AS $$
<your function def>
$$ LANGUAGE plpgsql VOLATILE;Sven Willenberger
That did the trick, thx...
BTJ