sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres trigger procedure ved indsættelse ved hjælp af data i indsatte felter for at indsætte beregnede data i et andet felt

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.*




  1. Postgresql intarray fejl:udefineret symbol:pfree

  2. Sådan finder du alle overtrædelser af begrænsninger i en SQL Server-database

  3. Ajax-formular Send med indsend-knap

  4. Eksporter tabeldata fra en SQL Server til en anden