sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres triggerprocedur vid infogning med hjälp av data i infogade fält för att infoga beräknade data i ett annat fält

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




  1. Rails Performance Tuning för produktion?

  2. trunc och round-funktion i sql

  3. Välj data mellan två datum exkludera vissa dagar

  4. Linq-frågan fungerar inte som förväntat