sql >> Databáze >  >> RDS >> PostgreSQL

Postgres spouštěcí procedura při vkládání pomocí dat do vložených polí k vložení vypočítaných dat do jiného pole

Vytvořte spouštěcí funkci:

create or replace function update_calc_column()
  returns trigger
as
$$
begin
  new.x3 := new.x1 + new.x2;
  return new;
end;
$$
language plpgsql;

Vytvořte spouštěč:

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

Výše uvedené je v podstatě zkrácená verze příkladu v příručce
http://www.postgresql.org/docs/current/static/plpgsql-trigger.html#PLPGSQL-TRIGGER-EXAMPLE

Ukládat takto odvozená data však obvykle není dobrý nápad. Měli byste jednoduše vytvořit pohled, který vrátí sloupec X3, který je definován jako X1 + X2 - mnohem méně kódu na údržbu a stejně efektivní (ve skutečnosti je to více efektivní, protože se zbavíte režie spouště).

Další (exotičtější) možností je použít objektově orientované rozšíření Postgres a vytvořit virtuální sloupec:

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;

Poté můžete použít:

select x.*, x.x3
from x;

SQLFiddle:http://sqlfiddle.com/#!15/53acf/1

To má však tu nevýhodu, že to musíte explicitně vyberte x3 sloupec. Při použití x.* se nezobrazí




  1. doctrine:schema:update nerespektuje pořadí sloupců

  2. SAP Lumira a most JDBC-ODBC

  3. Jak změnit uživatele na superuživatele v PostgreSQL

  4. Odebrání databázového poštovního účtu z profilu (SSMS)