PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Procedura wyzwalania Postgresa przy wstawianiu wykorzystująca dane we wstawionych polach do wstawienia obliczonych danych w innym polu

Utwórz funkcję wyzwalacza:

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

Utwórz wyzwalacz:

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

Powyższe jest zasadniczo uproszczoną wersją przykładu z podręcznika
http://www.postgresql.org/docs/current/static/plpgsql-trigger.html#PLPGSQL-TRIGGER-EXAMPLE

Jednak przechowywanie danych pochodnych w taki sposób zwykle nie jest dobrym pomysłem. Powinieneś po prostu utworzyć widok, który zwraca kolumnę X3, która jest zdefiniowana jako X1 + X2 - dużo mniej kodu do utrzymania i równie wydajna (w rzeczywistości to więcej wydajne, ponieważ pozbywasz się nadmiaru wyzwalacza).

Inną (bardziej egzotyczną) opcją jest użycie rozszerzenia obiektowego Postgresa i utworzenie wirtualnej kolumny:

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;

Następnie możesz użyć:

select x.*, x.x3
from x;

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

Ma to jednak tę wadę, że musisz wyraźnie wybierz x3 kolumna. Nie pojawi się przy użyciu 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. Instalowanie Orafce.sql 3.0 w systemie Windows 7

  2. Jak obsługiwać otwieranie/zamykanie połączenia Db w aplikacji Go?

  3. Przestaw na wiele kolumn za pomocą funkcji Tablefunc

  4. Pobieranie wszystkich zapytań uruchamianych przez django na postgresql

  5. Postgres:Przekazywanie niestandardowych typów z Javy do funkcji Postgres