PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Kích hoạt kích hoạt khi cập nhật cộtA hoặc CộtB hoặc CộtC

Đây là một sự hiểu lầm. WHEN mệnh đề của định nghĩa trình kích hoạt yêu cầu một boolean biểu thức và bạn có thể sử dụng OR các toán tử trong đó. Điều này sẽ hoạt động (với điều kiện là tất cả các cột thực sự tồn tại trong bảng account_details ). Bản thân tôi cũng đang sử dụng các trình kích hoạt tương tự:

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();

Đánh giá biểu thức có một chi phí nhỏ, nhưng điều này có lẽ đáng tin cậy hơn hơn lựa chọn thay thế:

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

Bởi vì, theo tài liệu:

Trình kích hoạt dành riêng cho cột (một trình kích hoạt được xác định bằng cách sử dụng UPDATE OF column_name cú pháp) sẽ kích hoạt khi bất kỳ cột nào của nó được liệt kê là mục tiêu trong UPDATE SET của lệnh danh sách. Giá trị của cột có thể thay đổi ngay cả khi trình kích hoạt không được kích hoạt, bởi vì các thay đổi được thực hiện đối với nội dung của cột bởi BEFORE UPDATE kích hoạt không được xem xét. Ngược lại, một lệnh như UPDATE ... SET x = x ... sẽ kích hoạt atrigger trên cột x, mặc dù giá trị của cột không thay đổi.

ROW cú pháp gõ ngắn hơn để kiểm tra trên nhiều cột (làm tương tự):

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();

Hoặc, để kiểm tra mọi cột người dùng hiển thị trong hàng:

...
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. Cách liệt kê các khóa ngoại của bảng

  2. Sử dụng Barman để sao lưu PostgreSQL - Tổng quan

  3. Làm cách nào để bật php hoạt động với postgresql?

  4. PostgreSQL:Sáu mảnh không dễ dàng

  5. cursor.execute (INSERT INTO im_entry.test (+ entrym +) VALUES ('+ p +');)