Re: Determining if a table really changed in a trigger

From: Marcos Pegoraro <marcos(at)f10(dot)com(dot)br>
To: Mitar <mmitar(at)gmail(dot)com>
Cc: Mark Dilger <mark(dot)dilger(at)enterprisedb(dot)com>, Postgres General <pgsql-general(at)postgresql(dot)org>
Subject: Re: Determining if a table really changed in a trigger
Date: 2021-10-27 10:56:20
Message-ID: CAB-JLwaABhUOttAKiioU+p-knaJV8SWwb8xEXo17Z+OHfp+06g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

>
> Oh, very interesting. I thought that this is not possible because WHEN
> condition on triggers does not have NEW and OLD. But this is a very
> cool way to combine rules with triggers, where a rule can still
> operate by row.
>
> That is not true

create table test(i integer);
create function test_old_new() returns trigger language plpgsql as $$
begin
raise notice '% - %', old.i, new.i;
return new;
end;$$;
CREATE TRIGGER testvalue BEFORE UPDATE OF i ON test FOR EACH ROW WHEN
(((new.i)::integer = 5::integer)) EXECUTE PROCEDURE test_old_new();
> insert into test values(4)
1 row affected in 52 ms
> update test set i = 6
1 row affected in 93 ms
> update test set i = 5
6 - 5 ->raise notice of procedure test_old_new was called only when new.i =
5
1 row affected in 48 ms

>
>

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tore Halvorsen 2021-10-27 11:27:26 pg_dump and pg_restore and foreign keys
Previous Message Jayadevan M 2021-10-27 10:48:38 Re: String comparison fails for some cases after migration