ट्रिगर: हटाए गए पंक्तियों को संग्रह तालिका में ले जाएं


18

मेरे पास restrictionsमेरी PostgreSQL डेटाबेस में एक छोटी (~ 10 पंक्तियाँ) तालिका है, जहाँ मान हटा दिए जाते हैं और दैनिक आधार पर डाले जाते हैं।

मैं एक तालिका कहलाना चाहता हूं restrictions_deleted, जहां से हटाई गई प्रत्येक पंक्ति restrictionsस्वचालित रूप से संग्रहीत की जाएगी। चूंकि restrictionsसीरियल आईडी है, इसलिए कोई डुप्लिकेट नहीं होगा।

मैं PostgreSQL में ऐसा ट्रिगर कैसे लिखूं?

जवाबों:


16

restrictions_deletedहटाए जाने से पहले आपको पुराने डेटा को तालिका में ले जाना होगा । यह OLDडेटा प्रकार के साथ किया जाता है । आप एक रेगुलेट INSERTस्टेटमेंट का उपयोग कर सकते हैं और OLDवैल्यू-टू-इंसर्ट के रूप में मूल्यों का उपयोग कर सकते हैं ।

CREATE TRIGGER moveDeleted
BEFORE DELETE ON restrictions 
FOR EACH ROW
EXECUTE PROCEDURE moveDeleted();


CREATE FUNCTION moveDeleted() RETURNS trigger AS $$
    BEGIN
       INSERT INTO restrictions_deleted VALUES(OLD.column1, OLD.column2,...);
       RETURN OLD;
    END;
$$ LANGUAGE plpgsql;

2
आप कॉलम मानों की स्पष्ट सूची को कुछ इस तरह से बदल सकते हैंVALUES((OLD).*)
KayEss

1
ठीक काम करता है, लेकिन create functionपहले बुलाया जाना चाहिए create trigger। और VALUES((OLD).*)KayEss द्वारा सुझाई गई चाल अच्छी है।
mivk

8

यदि आप एक अलग दृष्टिकोण के लिए खुले हैं, तो क्या आपने मेज पर एक 'हटाए गए' बूलियन ध्वज को जोड़ने पर विचार किया है, या इसके बजाय एक 'हटाए गए' टाइमस्टैम्प।

या फिर भी बेहतर है, अपने डेटाबेस टेबलों तक पहुंच को रोकें और अपने लेन-देन एपीआई में ऑडिट ट्रेल को संभालें :)


+1 धन्यवाद - मेरे मामले के लिए काम नहीं करेगा, लेकिन यह एक अच्छा तरीका है जो केवल एक ही तालिका का उपयोग करता है।
एडम मटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.