PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Prosedur pemicu postgres pada penyisipan menggunakan data di bidang yang dimasukkan untuk memasukkan data yang dihitung di bidang lain

Buat fungsi pemicu:

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

Buat pemicunya:

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

Di atas pada dasarnya adalah versi sederhana dari contoh dalam manual
http://www.postgresql.org/docs/current/static/plpgsql-trigger.html#PLPGSQL-TRIGGER-EXAMPLE

Namun, menyimpan data turunan seperti itu biasanya bukan ide yang baik. Anda cukup membuat tampilan yang mengembalikan kolom X3 yang didefinisikan sebagai X1 + X2 - kode jauh lebih sedikit untuk dipelihara dan sama efisiennya (sebenarnya lebih efisien karena Anda menyingkirkan pemicu overhead).

Opsi lain (lebih eksotis) adalah menggunakan ekstensi berorientasi objek Postgres dan membuat kolom virtual:

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;

Anda kemudian dapat menggunakan:

select x.*, x.x3
from x;

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

Namun ini memiliki kelemahan yang Anda butuhkan untuk secara eksplisit pilih x3 kolom. Itu tidak akan muncul saat menggunakan 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. Bagaimana cara menanyakan array jsonb dengan operator IN

  2. Gunakan output teks dari fungsi sebagai kueri baru

  3. Apakah ada cara untuk mengatasi semua elemen array JSON saat membuat batasan di PostgreSQL?

  4. PostgreSQL mengembalikan fungsi dengan Tipe Data Kustom

  5. Rails:Cara membuat kolom waktu dengan zona waktu di postgres