Trigger Execution Order in Postgres
SQL specifies that multiple triggers should be fired in time-of-creation order. PostgreSQL uses name order, which was judged to be more convenient.
1create table data (2 id serial primary key,3 value text not null4);5
6create or replace function c()7returns trigger as $$8begin9 raise notice 'c';10 return new;11end;12$$ language plpgsql;13
14create or replace function b()15returns trigger as $$16begin17 raise notice 'b';18 return new;19end;20$$ language plpgsql;21
22create or replace function a()23returns trigger as $$24begin25 raise notice 'a';26 return new;27end;28$$ language plpgsql;29
30create trigger c31before insert on data32for each row33execute function c();34
35create trigger b36before insert on data37for each row38execute function b();39
40create trigger a41before insert on data42for each row43execute function a();
The triggers were created with order c,b,a
, but executed in order a,b,c
.
1insert into data (value) values ('hello');2
3NOTICE: a4NOTICE: b5NOTICE: c
Wow! You read the whole thing. People who make it this far sometimes
want to receive emails when I post something new.
I also have an RSS feed.