Trigger issue, bug? on 7.2.1
Hi, we are having some trouble we a trigger.
Or version is: PostgreSQL 7.2.1 on i686-pc-linux-gnu, compiled by GCC
2.96, running on RH72.
Suppose this SQL query:
UPDATE table set state=1 where id=30;
Theres a trigger on the table ON UPDATE BEFORE
The trigger code is something like this:
IF NEW.state = 1 THEN
RAISE NOTICE ''Trigger: % -> some administrative information '',
TG_NAME; NEW.state=2;
END IF;
IF NEW.state = 2 THEN
RAISE NOTICE ''Trigger: % -> some administrative information
'',TG_NAME; DELETE FROM table where id = OLD.id;
END IF;
The trigger code will force another trigger fire because of the changes
in the record. I'm i right?
The trouble is that the trigger isnt firing, the trigger only gets
executed only once.
If i do a select on the table the state field contains the value 2 not
1, so i'm shure the trigger as runned.
Is this a trigger issue or i'm i doing something wrong?
Please fell free to ask more information if needed.
Miguel Carvalho
"Miguel Carvalho" <miguel@ipatimup.pt> writes:
The trigger code will force another trigger fire because of the changes
in the record. I'm i right?
No, altering the NEW record doesn't cause any additional trigger
firings. If it did, such a trigger would be infinitely recursive.
Your DELETE issued by the trigger would cause firing of ON DELETE
triggers, but not another firing of ON UPDATE.
regards, tom lane
"Miguel Carvalho" <miguel@ipatimup.pt> writes:
The trigger code will force another trigger fire because of the
changes in the record. I'm i right?No, altering the NEW record doesn't cause any additional trigger
firings. If it did, such a trigger would be infinitely recursive.
I see your point, you are completely right!
Your DELETE issued by the trigger would cause firing of ON DELETE
triggers, but not another firing of ON UPDATE.
You are right, too.
When i was repplying to your message, after stripping some lines of the
trigger code, i have found that the second trigger fire ( not actualy a
real trigger fire ) was caused by a bad logic in the trigger code.
Thank's to all for the repplies.
Regards
Miguel Carvalho