Short circuit operations in plpgsql?

Started by Steve Atkinsover 21 years ago2 messagesgeneral
Jump to latest
#1Steve Atkins
steve@blighty.com

I have some triggers. They need to do stuff when a new row is inserted
or when the value of a particular field changes.

So, something like:

IF TG_OP='INSERT' OR NEW.foo != OLD.foo THEN
-- do stuff
END IF;
RETURN NEW;

Is there anything that guarantees that the NEW.foo != OLD.foo won't
be evaluated (and hence fail, as there is no OLD) on an insert?

Cheers,
Steve

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Steve Atkins (#1)
Re: Short circuit operations in plpgsql?

Steve Atkins <steve@blighty.com> writes:

IF TG_OP='INSERT' OR NEW.foo != OLD.foo THEN
-- do stuff

Is there anything that guarantees that the NEW.foo != OLD.foo won't
be evaluated (and hence fail, as there is no OLD) on an insert?

The only way is to split the expression into two IF commands. The real
problem is not with the evaluation per se, but with plpgsql having to
pass down all the variable values used in the expression before
evaluation can start.

regards, tom lane