Opret triggerfunktionen:
create or replace function update_calc_column()
returns trigger
as
$$
begin
new.x3 := new.x1 + new.x2;
return new;
end;
$$
language plpgsql;
Opret triggeren:
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
Ovenstående er i det væsentlige en afisoleret version af eksemplet i manualen
http://www.postgresql.org/docs/current/static/plpgsql-trigger.html#PLPGSQL-TRIGGER-EXAMPLE
Det er dog normalt ikke en god idé at gemme afledte data på den måde. Du skal blot oprette en visning, der returnerer en kolonne X3, som er defineret som X1 + X2
- meget mindre kode at vedligeholde og lige så effektiv (faktisk er det mere effektiv, fordi du slipper af med udløseren overhead).
En anden (mere eksotisk) mulighed er at bruge Postgres' objektorienterede udvidelse og oprette en virtuel kolonne:
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 derefter bruge:
select x.*, x.x3
from x;
SQLFiddle:http://sqlfiddle.com/#!15/53acf/1
Dette har dog den ulempe, at du skal eksplicit vælg x3
kolonne. Det vises ikke, når du bruger x.*