Hello
it's not bug, but feature.
>
> CREATE OR REPLACE FUNCTION trg_mytable_after()
> RETURNS trigger AS
> $BODY$
> BEGIN
> IF TG_OP = 'UPDATE' OR TG_OP = 'DELETE' THEN
> IF (CASE WHEN TG_OP = 'DELETE' THEN TRUE ELSE OLD.a <> NEW.a END) THEN
> RAISE NOTICE 'OK!';
> END IF;
> END IF;
>
CASE expression isn't evaluated internally in plpgsql, but it is
transformed to SQL statement, that is evaluated by SQL procession. You
code is some like:
DECLARE result boolean;
BEGIN
IF TG_OP = 'UPDATE' OR TG_OP = 'DELETE' THEN
EXECUTE 'CASE WHEN $1 = 'DELETE' THEN true ELSE $2.a <> $3.a END'
USING TG_OP, OLD.a, OLD.b INTO result;
IF result THEN
RAISE NOTICE 'OK!';
Regards
Pavel Stehule