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

PostgreSQL - किसी अन्य सेल मान के अनुसार डिफ़ॉल्ट सेल मान सेट करें

यह संभव नहीं है एक साधारण DEFAULT . के साथ मान, जैसा कि मैनुअल स्पष्ट रूप से बताता है:

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

मान किसी भी चर-मुक्त अभिव्यक्ति है (वर्तमान तालिका में अन्य स्तंभों के लिए उपश्रेणी और क्रॉस-रेफरेंस की अनुमति नहीं है)।

आप एक ट्रिगर . का उपयोग कर सकते हैं इसके बजाय:

CREATE OR REPLACE FUNCTION trg_foo_b_default()
  RETURNS trigger
  LANGUAGE plpgsql AS
$func$
BEGIN
   -- For just a few constant options, CASE does the job:
   NEW.b := CASE NEW.a
               WHEN 'peter'  THEN 'doctor'
               WHEN 'weirdo' THEN 'shrink'
               WHEN 'django' THEN 'undertaker'
               ELSE NULL
            END;

   /*
   -- For more, or dynamic options, consider a lookup table:
   SELECT INTO NEW.b  t.b
   FROM   def_tbl t
   WHERE  t.a = NEW.a;
   */

   RETURN NEW;
END
$func$;


CREATE TRIGGER b_default
BEFORE INSERT ON foo
FOR EACH ROW
WHEN (NEW.b IS NULL AND NEW.a IS NOT NULL)
EXECUTE PROCEDURE trg_foo_b_default();

इसे और अधिक कुशल बनाने के लिए WHEN . का उपयोग करें ट्रिगर परिभाषा में क्लॉज (पोस्टग्रेज 9.0 के बाद से उपलब्ध):इस तरह ट्रिगर फ़ंक्शन केवल तभी निष्पादित होता है, जब यह वास्तव में उपयोगी होता है। (यह मानते हुए कि हम b IS NULL दे सकते हैं स्लाइड करें यदि a IS NULL ।)

समान रूप से काम करता है, लेकिन सूक्ष्म रूप से भिन्न एक DEFAULT . से फैशन value.
डिफ़ॉल्ट मान के साथ, आप स्पष्ट रूप से NULL . डाल सकते हैं डिफ़ॉल्ट को रद्द करने के लिए। यह यहाँ संभव नहीं है, NULL b . में a . से प्राप्त मान से बदल दिया जाता है ।



  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. Pgbackrest डेल्टा को पुनर्स्थापित करें और पुनर्स्थापित करें

  4. PSQL कमांड का उपयोग करके होस्ट नाम और पोर्ट खोजें

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