ट्रिगर फ़ंक्शन बनाएं:
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.*
. का उपयोग करते समय यह दिखाई नहीं देगा