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

किसी अन्य फ़ील्ड में परिकलित डेटा सम्मिलित करने के लिए सम्मिलित फ़ील्ड में डेटा का उपयोग करके सम्मिलित करने पर ट्रिगर प्रक्रिया को पोस्टग्रेज़ करता है

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

create or replace function update_calc_column()
  returns trigger
as
$$
begin
  new.x3 := new.x1 + new.x2;
  return new;
end;
$$
language plpgsql;

ट्रिगर बनाएं:

create trigger calc_trigger 
   before insert or update on X
   for each row
   execute procedure update_calc_column();

SQLFiddle:http://sqlfiddle.com/#!15/7ed21/1

उपरोक्त अनिवार्य रूप से मैनुअल में उदाहरण का एक स्ट्रिप्ड डाउन संस्करण है
http://www.postgresql.org/docs/current/static/plpgsql-trigger.html#PLPGSQL-TRIGGER-EXAMPLE

हालांकि, इस तरह से व्युत्पन्न डेटा संग्रहीत करना आमतौर पर एक अच्छा विचार नहीं है। आपको बस एक ऐसा दृश्य बनाना चाहिए जो एक कॉलम X3 लौटाता है जिसे X1 + X2 . के रूप में परिभाषित किया गया है - बनाए रखने के लिए बहुत कम कोड और उतना ही कुशल (वास्तव में यह अधिक . है कुशल है क्योंकि आप ट्रिगर ओवरहेड से छुटकारा पाते हैं)।

एक अन्य (अधिक आकर्षक) विकल्प पोस्टग्रेज़ के ऑब्जेक्ट ओरिएंटेड एक्सटेंशन का उपयोग करना और एक वर्चुअल कॉलम बनाना है:

create or replace function x3(data X) --<< yes, the type of the parameter is the name of the table 
   returns integer
as
$$
   select data.x1 + data.x2;
$$
language sql;

तब आप इसका उपयोग कर सकते हैं:

select x.*, x.x3
from x;

SQLFiddle:http://sqlfiddle.com/#!15/53acf/1

हालांकि इसका नुकसान यह है कि आपको स्पष्ट रूप से . की आवश्यकता है x3 चुनें कॉलम। x.* . का उपयोग करते समय यह दिखाई नहीं देगा




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django स्थिरता विफल रहता है, DatabaseError बताते हुए:प्रकार वर्ण भिन्न के लिए बहुत लंबा मान (50)

  2. समय श्रृंखला डेटा पर पुन:नमूना

  3. होस्ट के लिए कोई pg_hba.conf प्रविष्टि नहीं है

  4. किसी उपयोगकर्ता को किसी फ़ंक्शन को बदलने की अनुमति दें

  5. जेपीए अनुक्रम जेनरेटर और जेनरेट वैल्यू:नाम/जेनरेटर संपत्ति केवल प्रति वर्ग अद्वितीय है?