PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Процедура за задействане на Postgres при вмъкване с използване на данни във вмъкнати полета за вмъкване на изчислени данни в друго поле

Създайте тригерната функция:

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

Въпреки това, съхраняването на получени данни като това обикновено не е добра идея. Трябва просто да създадете изглед, който връща колона X3, която е дефинирана като X1 + X2 - много по-малко код за поддръжка и също толкова ефективен (всъщност е повече ефикасно, защото се отървавате от излишните разходи за задействане).

Друг (по-екзотичен) вариант е да използвате обектно ориентираното разширение на 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.*




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да зададете потребителска парола по подразбиране в PostgreSQL

  2. Актуализирайте множество записи в една транзакция ActiveRecord в Rails

  3. Как да получите текущата дата в PostgreSQL

  4. Промяна на схемата по подразбиране за потребителя

  5. xlookup функция в SQL