PostgreSQL में पंक्ति को अपडेट करने पर टाइमस्टैम्प को अपडेट करें


85

MySQL में, हम इसे क्रियान्वित कर सकते हैं जहाँ यह changetimestampहर बार पंक्ति बदलने पर कॉलम को अपडेट करता है:

create table ab (
  id int, 
  changetimestamp timestamp 
    NOT NULL 
    default CURRENT_TIMESTAMP 
    on update CURRENT_TIMESTAMP 
);

क्या PostgreSQL में उपरोक्त कुछ ऐसा ही है?


PostgreSQL में ऐसा आसान नहीं है जहाँ आपको एक ट्रिगर की आवश्यकता है: pointbeing.net/weblog/2008/03/…
मैकेनिकल_मीट

2
यह ध्यान देने योग्य है कि MySQL में timestampसंस्करण और सेटिंग्स के आधार पर कॉलम के लिए कई "विशेष उपचार" हैं, जो (सौभाग्य से!) पोस्टग्रेज में पुन: प्रस्तुत नहीं किए जा सकते हैं। जैसे 0एक timestampकॉलम के लिए अनुमति देना या NULLकुछ नक्षत्रों में इनपुट पर वर्तमान टाइमस्टैम्प में बदलना । सूक्ष्म अंतर के बारे में पता करने के लिए दोनों RDBMS के मैनुअल का अध्ययन करना सुनिश्चित करें: MySQL और Postgres
इरविन ब्रान्डेसटेटर

1
@ErwinBrandstetter 2018 को टाइमस्टैम्पिंग ऑटौपडेटिंग के लिए सबसे अच्छा अभ्यास नीचे दिया गया उत्तर है?
कॉमनसेंससकोड

जवाबों:


124

एक ऐसा फंक्शन बनाएं जो तालिका के चेंजिमस्टैम्प कॉलम को इस तरह अपडेट करता है:

CREATE OR REPLACE FUNCTION update_changetimestamp_column()
RETURNS TRIGGER AS $$
BEGIN
   NEW.changetimestamp = now(); 
   RETURN NEW;
END;
$$ language 'plpgsql';

जब भी कोई अद्यतन ऐसा होता है, तो अद्यतन_changetimestamp_column () फ़ंक्शन को कॉल करने वाली तालिका पर ट्रिगर बनाएं:

    CREATE TRIGGER update_ab_changetimestamp BEFORE UPDATE
    ON ab FOR EACH ROW EXECUTE PROCEDURE 
    update_changetimestamp_column();

2
तो, ट्रिगर के अलावा मुझे जो करना है, वह करने का कोई और तरीका नहीं है? क्योंकि मैं अपने सभी तालिकाओं के लिए संभवत: 300+ पर 'अपडेट टाइमस्टैम्प पर' लागू करना चाहता हूं। और मैं सोच रहा हूं कि ट्रिगर बनाने से कुछ प्रदर्शन समस्याओं का कारण हो सकता है।
bichonfrise74

5
जहाँ तक मुझे पता है कि यह postgresql में ऐसा करने का मानक तरीका है। जब आप mysql में "अपडेट करंट_टीमस्टैम्प पर" लिखते हैं, तो यह बैकग्राउंड में टेबल पर एक ट्रिगर बनाता है। अंतर यह है कि आप ट्रिगर को मैन्युअल रूप से लिख रहे हैं बजाय इसके कि यह आपके लिए लिखा जाए।
चार्ल्स मा

3
व्यावहारिक रूप से कोई प्रदर्शन दंड नहीं है - कम से कम किसी भी समझदार डेटाबेस में।

5
क्या कॉलम का नाम देने का कोई तरीका है जिसे फ़ंक्शन के पैरामीटर के रूप में अपडेट करने की आवश्यकता है update_changetimestamp_column?
एंटोन मिल्कोव

7
@womble इसका एक उदाहरण पोस्ट करने के लिए बहुत उपयोगी होगा। यदि मैं यह कैसे प्रबंधित करूं कि किस कॉलम को अपडेट करना है, तो मैं इसे उत्तर के रूप में लिखूंगा।
मिररफाइंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.