2009-06-24 12 views
53

MySQL में अद्यतन किया जाता है, हम इस जहां यह स्तंभ changetimestamp हर बार पंक्ति बदल गया है अद्यतन करता है पर अमल कर सकते हैं:अद्यतन टाइमस्टैम्प जब पंक्ति PostgreSQL

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

वहाँ कुछ इसी तरह PostgreSQL में ऊपर करने के लिए है?

+0

पोस्टग्रेएसक्यूएल में आसान नहीं है जहां आपको ट्रिगर की आवश्यकता है: http://www.pointbeing.net/weblog/2008/03/mysql-versus-postgresql-adding-a-last-modified-column-to-a-table .html – bernie

+2

यह ध्यान देने योग्य है कि MySQL के पास 'टाइमस्टैम' के लिए कई "विशेष उपचार" हैं पी 'कॉलम संस्करण और सेटिंग्स के आधार पर, जो (सौभाग्य से!) पोस्टग्रेज़ में पुन: उत्पन्न नहीं किया जा सकता है। कुछ नक्षत्रों में इनपुट पर 'टाइमस्टैम्प' कॉलम के लिए '0' की अनुमति देने या' NULL' को वर्तमान टाइमस्टैंप में बदलने की तरह। सूक्ष्म मतभेदों से अवगत होने के लिए आरडीबीएमएस दोनों के मैनुअल का अध्ययन करना सुनिश्चित करें: [MySQL] (http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html) और [पोस्टग्रेस] (http : //www.postgresql.org/docs/current/interactive/datatype-datetime.html)। –

उत्तर

88

एक समारोह है कि इतनी तरह एक तालिका के changetimestamp स्तंभ अद्यतन करता है बनाएँ:

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

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

तालिका update_changetimestamp_column() फ़ंक्शन को कॉल करने पर एक ट्रिगर बनाएं जब भी एक अद्यतन इसलिए की तरह होता है

+0

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

+3

जहां तक ​​मुझे पता है कि यह postgresql में ऐसा करने का मानक तरीका है। जब आप mysql में "current_timestamp अद्यतन पर" लिखते हैं, तो यह पृष्ठभूमि में तालिका पर एक ट्रिगर बनाता है। अंतर यह है कि आप इसे आपके लिए लिखे जाने के बजाय मैन्युअल रूप से ट्रिगर लिख रहे हैं। –

+3

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

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