यहाँ एक सरल समाधान है इसके लिए, ऐसे मामलों के लिए जहां डेटा का आकार बहुत बड़ा नहीं है और प्रदर्शन आवश्यकताओं को बहुत कठिन नहीं है।
सबसे पहले, आइए अपनी तालिका बनाएं। हमारे पास एक आईडी कॉलम और डेटा कॉलम होगा, लेकिन आपके पास अपनी विशेष स्थिति के लिए आवश्यक कॉलम हो सकते हैं।
CREATE TABLE capped_collection (
id integer NOT NULL,
data text);
अब, हम, हमारी प्राथमिक कुंजी के लिए एक दृश्य बनाने के MAXVALUE
सेट हमारे छाया हुआ संग्रह का इच्छित आकार होने के लिए, और हम CYCLE
विकल्प का उपयोग, ताकि अनुक्रम MAXVALUE
और उसके बाद पुनः आरंभ करने के लिए गणना की जाएगी फिर से 1.
CREATE SEQUENCE capped_collection_id_seq
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 10000
CACHE 1
CYCLE
OWNED BY capped_collection.id;
अगले कदम (यहाँ नहीं दिखाया गया है) में, आप MAXVALUE
रिकॉर्ड के साथ-बीज पूर्व चाहिए तालिका। हम ऐसा करते हैं ताकि प्रत्येक आईडी मान में एक पंक्ति हो, और हमें यह तय करने की आवश्यकता नहीं है कि आईएनएसईआरटी या अद्यतन ऑपरेशन करना है या नहीं, बस चीजों को सरल और निष्पादित रखने के लिए।
अब जब कि हमारे टेबल की स्थापना की है, जब भी हम एक नई पंक्ति सम्मिलित करना चाहते हैं, लेकिन इसके बदले हम तो
UPDATE capped_collection
SET data = 'your data here'
WHERE id = (SELECT nextval('capped_collection_id_seq'))
nextval
आदेश हमें अगले आईडी हो जाता है की तरह एक अद्यतन करते हैं, और क्योंकि हम CYCLE
निर्दिष्ट यह एक बार यह MAXVALUE
तक पहुंचने के बाद लगभग 1 तक लपेट जाएगा। अंतिम परिणाम यह है कि आपके पास तालिका में केवल MAXVALUE
पंक्तियां होंगी, जिसमें सबसे पुरानी प्रविष्टियां वृद्ध हो रही हैं।
(http://www.rigelgroupllc.com/blog/2014/10/14/capped-collections-in-postgres/ से)
विभाजन को लागू करें और प्रोग्राम के रूप में पुराने विभाजन छोड़ने और केवल सबसे हाल ही में एक काम हो सकता है रखे हुए हैं। सैद्धांतिक रूप से इसे तालिका से पंक्तियों को हटाने से बेहतर तरीके से प्रदर्शन करना चाहिए। – Marquez