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

डायनामिक फ़ील्ड नाम के साथ ट्रिगर

आप इसे आसानी से hstore . के साथ लागू कर सकते हैं ऑपरेटर #= :

सुनिश्चित करें कि अतिरिक्त मॉड्यूल ठीक से स्थापित है (एक बार प्रति डेटाबेस), एक स्कीमा में जो आपके search_path . में शामिल है :

  • pg_trgm एक्सटेंशन से % ऑपरेटर का उपयोग कैसे करें?
  • पोस्टग्रेज डेटाबेस में एकाधिक स्कीमा पर hstore स्थापित करने का सबसे अच्छा तरीका?

ट्रिगर फ़ंक्शन:

CREATE OR REPLACE FUNCTION tbl_insup_bef()
  RETURNS TRIGGER AS
$func$
DECLARE
   _prefix CONSTANT text := 'some prepend data'; -- your prefix here
   _prelen CONSTANT int  := 17;  -- length of above string (optional optimization)
   _col text := quote_ident(TG_ARGV[0]);
   _val text;
BEGIN
   EXECUTE 'SELECT $1.' || _col
   USING NEW
   INTO _val;

   IF left(_val, _prelen) = _prefix THEN 
      -- do nothing: prefix already there!
   ELSE
      NEW := NEW #= hstore(_col, _prefix || _val);  
   END IF;

   RETURN NEW;
END
$func$  LANGUAGE plpgsql;

ट्रिगर (एक से अधिक तालिकाओं के लिए एक ही func का पुन:उपयोग करें):

CREATE TRIGGER insup_bef
BEFORE INSERT OR UPDATE ON tbl
FOR EACH ROW
EXECUTE PROCEDURE tbl_insup_bef('fieldName');  -- unquoted, case-sensitive column name

अधिक स्पष्टीकरण और सलाह के साथ निकटता से संबंधित:

  • डायनेमिक कॉलम नाम वाले कॉलम का असाइनमेंट
  • नई या पुरानी फ़ील्ड को केवल फ़ील्ड के नाम से कैसे एक्सेस करें?
  • सामान्य ट्रिगर में अलग-अलग स्तंभों से मान प्राप्त करें


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. विदेशी सर्वर में शामिल होने/दबाने से पहले सबक्वायरी के मूल्यांकन को कैसे बाध्य करें

  2. सेलेक्ट क्लॉज में एकाधिक सेट-रिटर्निंग फ़ंक्शंस के लिए अपेक्षित व्यवहार क्या है?

  3. PostgreSQL:डिफ़ॉल्ट बाधा नाम

  4. पीजी ::डुप्लीकेटटेबल:त्रुटि:संबंध पोस्ट पहले से मौजूद हैं

  5. मेरे MySQL डीबी के लिए काम नहीं कर रहे लेनदेन