2012-09-10 14 views
11

का उपयोग कर एक और तालिका अद्यतन करने के लिए मैं एक मेज नामित पुरस्कार है। मैं PostgreSQL में एक ट्रिगर कैसे माउंट कर सकता हूं जहां टेबल पुरस्कार में प्रत्येक सम्मिलन एक अलग तालिका अद्यतन करता है?सम्मिलित ट्रिगर PostgreSQL

+1

आप कुछ मोर प्रदान कर सके बनाएं ई विवरण? क्या यह "अलग तालिका" पुरस्कारों में कुछ फ़ील्ड के कुछ मूल्यों के आधार पर एक एकल, अलग तालिका या एकाधिक सारणी है। – jcater

+2

http://www.postgresql.org/docs/8.1/static/triggers.html – ertx

+2

@ertx बेहतर/8.1/ डॉक्टर के बजाय/वर्तमान/डॉक्टर से लिंक करने के लिए बेहतर है, यह * बेहद * पुराना है। –

उत्तर

4

आप documenation for PL/PgSQL triggers है, जो दूसरों के बीच में सिर्फ इस मामले पर चर्चा करना चाहते हैं। सामान्य documentation on triggers भी उपयोगी हो सकता है।

आप इसके लिए BEFORE या AFTER ट्रिगर का उपयोग कर सकते हैं। मैं शायद एक AFTER ट्रिगर ताकि मेरे ट्रिगर देखा पंक्ति के अंतिम संस्करण डाला जा रहा है, हालांकि का उपयोग करेंगे। आप निश्चित रूप से FOR EACH ROW चाहते हैं।

+0

[meta.SO. पर PostgreSQL मैनुअल संदर्भित के बारे में अधिक] अरे @ क्रेग रिंगर बैच आवेषण के लिए प्रत्येक पंक्ति के लिए उद्देश्य है? – rosenthal

+1

@rosenthal हुह? 'प्रत्येक कथन के लिए' ट्रिगर्स को 'नई' पंक्ति तक पहुंच नहीं है। तो अगर आप एक पंक्ति 'INSERT' कर रहे थे, तो यह इसके लिए उपयोगी नहीं होगा। –

+0

मेरा मतलब यह नहीं था कि, शब्दों में मेरी खराब पसंद को क्षमा करें। मेरा मतलब है कि प्रत्येक के लिए क्या करना है? मैंने पोस्टग्रेज़ के लिए प्रलेखन को देखा और अब इसे समझ लिया। "प्रत्येक पंक्ति के लिए चिह्नित एक ट्रिगर को प्रत्येक पंक्ति के लिए एक बार कहा जाता है जिसे ऑपरेशन संशोधित करता है।" – rosenthal

25

यहाँ हम table1 और table2 नामित दो तालिकाओं की है। एक ट्रिगर मैं table1 में प्रविष्टि पर table2 अपडेट कर देंगे का उपयोग करना।

टेबल

CREATE TABLE table1 
(
    id integer NOT NULL, 
    name character varying, 
    CONSTRAINT table1_pkey PRIMARY KEY (id) 
) 

CREATE TABLE table2 
(
    id integer NOT NULL, 
    name character varying 
) 

उत्प्रेरक समारोह

CREATE OR REPLACE FUNCTION function_copy() RETURNS TRIGGER AS 
$BODY$ 
BEGIN 
    INSERT INTO 
     table2(id,name) 
     VALUES(new.id,new.name); 

      RETURN new; 
END; 
$BODY$ 
language plpgsql; 

उत्प्रेरक

CREATE TRIGGER trig_copy 
    AFTER INSERT ON table1 
    FOR EACH ROW 
    EXECUTE PROCEDURE function_copy(); 
+0

ट्रिगर में फ़ंक्शन फ़ंक्शन एक तालिका से मूल्यों को सम्मिलित करने के लिए कैसे जानता है? "मूल्यों (new.id, new.name)" के बाद हमें "table1 से" लिखने की आवश्यकता नहीं है? –

संबंधित मुद्दे