トリガー関数を作成します:
create or replace function update_calc_column()
returns trigger
as
$$
begin
new.x3 := new.x1 + new.x2;
return new;
end;
$$
language plpgsql;
トリガーを作成します:
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
上記は基本的に、マニュアルの例を簡略化したものです
http://www.postgresql.org/docs/current/static/plpgsql-trigger.html#PLPGSQL-TRIGGER-EXAMPLE
ただし、そのような派生データを保存することは、通常はお勧めできません。 X1 + X2
として定義されている列X3を返すビューを作成するだけです。 -維持するコードがはるかに少なく、同じくらい効率的です(実際にはもっと トリガーのオーバーヘッドを取り除くので効率的です。
もう1つの(よりエキゾチックな)オプションは、Postgresのオブジェクト指向拡張機能を使用して仮想列を作成することです:
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;
その後、次を使用できます:
select x.*, x.x3
from x;
SQLFiddle: http://sqlfiddle.com/#!15/53acf/1
ただし、これには、明示的にする必要があるという欠点があります。 x3
を選択します 桁。 x.*
を使用している場合は表示されません