Skapa triggerfunktionen:
create or replace function update_calc_column()
returns trigger
as
$$
begin
new.x3 := new.x1 + new.x2;
return new;
end;
$$
language plpgsql;
Skapa utlösaren:
create trigger calc_trigger
before insert or update on X
for each row
execute procedure update_calc_column();
SQLFiddle:http://sqlfiddle.com/#!15/7ed21/1
Ovanstående är i huvudsak en avskalad version av exemplet i manualen
http://www.postgresql.org/docs/current/static/plpgsql-trigger.html#PLPGSQL-TRIGGER-EXAMPLE
Men att lagra härledd data som det är vanligtvis inte en bra idé. Du bör helt enkelt skapa en vy som returnerar en kolumn X3 som är definierad som X1 + X2
- mycket mindre kod att underhålla och lika effektiv (det är faktiskt mer effektiv eftersom du blir av med utlösaren overhead).
Ett annat (mer exotiskt) alternativ är att använda Postgres objektorienterade tillägg och skapa en virtuell kolumn:
create or replace function x3(data X) --<< yes, the type of the parameter is the name of the table
returns integer
as
$$
select data.x1 + data.x2;
$$
language sql;
Du kan sedan använda:
select x.*, x.x3
from x;
SQLFiddle:http://sqlfiddle.com/#!15/53acf/1
Detta har dock nackdelen att du måste explicit välj x3
kolumn. Det kommer inte att visas när du använder x.*