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

Pemicu kebakaran pada pembaruan kolomA atau KolomB atau KolomC

Ini adalah kesalahpahaman. WHEN klausa definisi pemicu mengharapkan boolean ekspresi dan Anda dapat menggunakan OR operator di dalamnya. Ini seharusnya berfungsi (mengingat bahwa semua kolom benar-benar ada di tabel account_details ). Saya sendiri menggunakan pemicu serupa:

CREATE TRIGGER trigger_update_account_details
AFTER UPDATE ON account_details
FOR EACH ROW
WHEN (OLD.email    IS DISTINCT FROM NEW.email
   OR OLD.username IS DISTINCT FROM NEW.username
   OR OLD.password IS DISTINCT FROM NEW.password) 
EXECUTE PROCEDURE notify_insert_account_details();

Mengevaluasi ekspresi membutuhkan biaya yang kecil, tetapi ini mungkin lebih dapat diandalkan daripada alternatifnya:

CREATE TRIGGER ... AFTER UPDATE OF email, username, password ...

Karena, per dokumentasi:

Pemicu khusus kolom (pemicu yang ditentukan menggunakan UPDATE OF column_name sintaks) akan diaktifkan ketika salah satu kolomnya terdaftar sebagai target di UPDATE SET perintah daftar. Nilai kolom dapat berubah meskipun pemicu tidak diaktifkan, karena perubahan dilakukan pada konten baris oleh BEFORE UPDATE pemicu tidak dipertimbangkan. Sebaliknya, perintah seperti UPDATE ... SET x = x ... akan memicu pemicu pada kolom x, meskipun nilai kolom tidak berubah.

ROW sintaks ketik lebih pendek untuk memeriksa banyak kolom (melakukan hal yang sama):

CREATE TRIGGER trigger_update_account_details
AFTER UPDATE ON account_details
FOR EACH ROW
WHEN ((OLD.email, OLD.username, OLD.password, ...)
       IS DISTINCT FROM
      (NEW.email, NEW.username, NEW.password, ...))
EXECUTE PROCEDURE notify_insert_account_details();

Atau, untuk memeriksa setiap kolom pengguna yang terlihat di baris:

...
WHEN (OLD IS DISTINCT FROM NEW)
...


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membuat Modul Baru menggunakan PostgreSQL Create Extension

  2. Bagaimana cara memasukkan pandas DataFrame ke tabel PostgreSQL?

  3. Bagaimana cara mengubah semua kepemilikan objek dalam skema tertentu di PostgreSQL?

  4. Melewati param ke DB .execute untuk WHERE IN... INT list

  5. Rails Console menemukan pengguna berdasarkan array id