PostgreSQL - better than triggers more effective than after triggers?

I just read in the PostgreSQL Documentation - Overview of trigger behavior that BEFORE triggers are more efficient than AFTER triggers:

Unless you have a specific reason for the trigger before or after, the deal is more effective because the operation information does not need to be saved until the end of the statement.

I don’t understand whether this is true or what it means to me. Can someone enlighten me? Is it just a homeopathic performance improvement?

+5
source share
3 answers

PostgreSQL MVCC , , DELETE.

, , , , .

+6

:

"":

begin;

create function f() returns trigger language plpgsql as $$
begin 
  new.time_of_day:=old.time_of_day+'1d'::interval; 
  return new; 
end;$$;

create table t(time_of_day timestamp);

insert into t(time_of_day)
select timeofday()::timestamp from generate_series(1,100000);

update t set time_of_day = timeofday()::timestamp;

select max(time_of_day)-min(time_of_day) from t;

    ?column?
-----------------
 00:00:47

create trigger trig before insert on t for each row execute procedure f();

update t set time_of_day = timeofday()::timestamp;

select max(time_of_day)-min(time_of_day) from t;

    ?column?
-----------------
 00:00:47.432173

rollback;

"":

create function f() returns trigger language plpgsql as $$
begin 
  new.time_of_day:=old.time_of_day+'1d'::interval; 
  return new; 
end;$$;

create table t(time_of_day timestamp);

insert into t(time_of_day)
select timeofday()::timestamp from generate_series(1,100000);

update t set time_of_day = timeofday()::timestamp;

select max(time_of_day)-min(time_of_day) from t;

    ?column?
-----------------
 00:00:48.566558

create trigger trig after insert on t for each row execute procedure f();

update t set time_of_day = timeofday()::timestamp;

select max(time_of_day)-min(time_of_day) from t;

    ?column?
-----------------
 00:00:48.922441

- "" ""

+2

- , , .

Thinking logically is at a high level ... if you take an extra step to save more information and not take an extra step, of course, this is more than work. As with walking, one additional step is more work, even if it cannot lead to a noticeable time difference. For example, to walk 10 feet with 10 steps versus 11 steps.

+1
source

All Articles