If I have an expression (a or b)a where a=TRUE and b=FALSE, why is b evaluated? Any true operand before an or operator means the entire expression is true .
---------------------------- EXAMPLE create or replace function pinsusers() returns trigger as $$ declare msg varchar; begin --THROWS EXCEPTION when ((TG_OP = 'INSERT') is TRUE "record old is not assigned yet" msg = ((TG_OP = 'INSERT') or (new.password<>old.password)); raise exception '%',msg; return new; end $$ language plpgsql; ------------------------------------------------------ TY :-)