PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

कॉलम ए या कॉलम बी या कॉलम सी के अपडेट पर फायर ट्रिगर

यह एक गलतफहमी है। WHEN ट्रिगर परिभाषा का खंड एक boolean की अपेक्षा करता है अभिव्यक्ति और आप उपयोग कर सकते हैं OR इसमें ऑपरेटरों। यह बस काम करना चाहिए (यह देखते हुए कि सभी कॉलम वास्तव में तालिका में मौजूद हैं account_details ) मैं स्वयं समान ट्रिगर का उपयोग कर रहा हूं:

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

व्यंजक का मूल्यांकन करने में बहुत कम लागत आती है, लेकिन यह संभवतः अधिक विश्वसनीय है विकल्प के बजाय:

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

क्योंकि, प्रति दस्तावेज़:

<ब्लॉकक्वॉट>

एक स्तंभ-विशिष्ट ट्रिगर (जिसे UPDATE OF . का उपयोग करके परिभाषित किया गया है) column_name सिंटैक्स) तब सक्रिय होगा जब इसके किसी भी कॉलम को UPDATE . में लक्ष्य के रूप में सूचीबद्ध किया जाएगा कमांड का SET सूची। किसी स्तंभ के मान के लिए ट्रिगर सक्रिय न होने पर भी बदलना संभव है, क्योंकि BEFORE UPDATE द्वारा पंक्ति की सामग्री में किए गए परिवर्तन ट्रिगर्स पर विचार नहीं किया जाता है। इसके विपरीत, एक कमांड जैसे UPDATE ... SET x = x ... स्तंभ x पर ट्रिगर सक्रिय करेगा, भले ही स्तंभ का मान नहीं बदला।

ROW टाइप सिंटैक्स कई कॉलमों पर जांच करने के लिए छोटा है (ऐसा ही करते हुए):

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

या, प्रत्येक . की जांच करने के लिए पंक्ति में दृश्यमान उपयोगकर्ता स्तंभ:

...
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. PostgreSQL त्रुटि:पुनर्प्राप्ति के साथ विरोध के कारण कथन रद्द करना

  2. अद्वितीय बाधा बनाम अनुक्रमणिका पोस्टग्रेज

  3. मैं एकाधिक स्तंभों के बीच सेट-जैसी विशिष्टता को कैसे लागू करूं?

  4. पीजी कॉलम को न्यूलेबल ट्रू में कैसे बदलें?

  5. Django विकास डेटाबेस को डिफ़ॉल्ट SQLite से PostgreSQL में बदलना