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

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Reply via email to