| 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: | Whole Thread | Raw Message | 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
>
>
| 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 |