Buat fungsi pemicu:
create or replace function update_calc_column()
returns trigger
as
$$
begin
new.x3 := new.x1 + new.x2;
return new;
end;
$$
language plpgsql;
Buat pemicunya:
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
Di atas pada dasarnya adalah versi sederhana dari contoh dalam manual
http://www.postgresql.org/docs/current/static/plpgsql-trigger.html#PLPGSQL-TRIGGER-EXAMPLE
Namun, menyimpan data turunan seperti itu biasanya bukan ide yang baik. Anda cukup membuat tampilan yang mengembalikan kolom X3 yang didefinisikan sebagai X1 + X2
- kode jauh lebih sedikit untuk dipelihara dan sama efisiennya (sebenarnya lebih efisien karena Anda menyingkirkan pemicu overhead).
Opsi lain (lebih eksotis) adalah menggunakan ekstensi berorientasi objek Postgres dan membuat kolom virtual:
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;
Anda kemudian dapat menggunakan:
select x.*, x.x3
from x;
SQLFiddle:http://sqlfiddle.com/#!15/53acf/1
Namun ini memiliki kelemahan yang Anda butuhkan untuk secara eksplisit pilih x3
kolom. Itu tidak akan muncul saat menggunakan x.*