From: | Jasen Betts <jasen(at)xnet(dot)co(dot)nz> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: PL/PGSQL: why IF test the whole condition before failing or not? |
Date: | 2009-08-20 13:28:24 |
Message-ID: | h6jj1o$ato$1@reversiblemaps.ath.cx |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On 2009-08-18, Suporte PK <fknoedt(at)gmail(dot)com> wrote:
> Hi list,
>
> I'm having trouble with - believe me! - the IF operator on a PL/PGSQL
> function used by a trigger.
>
> I'm using one unique function to process the three triggers events
> (delete, update and insert), but when I reference OLD or NEW on a IF
> CONDITION, I get an error even when testing BEFORE if it's a UPDATE
> event or not.
>
> example:
>
> IF TG_OP = 'UPDATE' AND OLD.field != NEW.field THEN
> ...
> END IF;
>
> The question is: if the trigger was not fired by an UPDATE event,
> shouldn't it make the first test and then ignore the rest of the condition?
>
> I know that some languages work like this (testing the whole condition)
> while others don't, but I searched for an alternative without success.
>
> Any advice would be much appreciated!
as you see a few more error messages (or unlike me get as far as
http://www.postgresql.org/docs/8.4/static/plpgsql-expressions.html
in the manual and understand it)
you'll come to understand that every /expression/ in plpgsql is
translated into a select, this can be exploited to simplifiy code.
avariable = somecolumn FROM atable WHERE someother=foo;
but has its down sides too:
SELECT TG_OP = 'UPDATE' AND OLD.field != NEW.field;
doesn't pass go with NEW undefined.
From | Date | Subject | |
---|---|---|---|
Next Message | Jasen Betts | 2009-08-20 13:43:10 | Re: Temp table or normal table for performance? |
Previous Message | Sam Mason | 2009-08-20 13:16:16 | Re: Postgre RAISE NOTICE and PHP |