Обсуждение: 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