मैं कुछ डेटा को एक टेबल से दूसरे स्थान पर ले जाना चाहता हूं (संभावित रूप से अलग स्कीमा के साथ)। सीधा समाधान यह है कि मन में आता है -डेटा को एक टेबल से दूसरे में ले जाएं, पोस्टग्रेस्क्ल संस्करण
start a transaction with serializable isolation level;
INSERT INTO dest_table SELECT data FROM orig_table,other-tables WHERE <condition>;
DELETE FROM orig_table USING other-tables WHERE <condition>;
COMMIT;
अब क्या डेटा की मात्रा नहीं बल्कि बड़ा है, और <condition>
गणना करने के लिए महंगा है तो क्या होगा? PostgreSQL में, एक RULE या संग्रहीत प्रक्रिया का उपयोग फ्लाई पर डेटा हटाने के लिए किया जा सकता है, केवल एक बार स्थिति का मूल्यांकन किया जा सकता है। कौन सा समाधान बेहतर है? क्या अन्य विकल्प हैं?
मैं कुछ परीक्षण प्रसंस्करण कर दिया है ट्रिगर का उपयोग करके डेटा की बड़ी मात्रा, पंक्ति से पंक्ति, और एक लेनदेन के साथ एक संग्रहीत प्रक्रिया का उपयोग करना। संग्रहित प्रक्रिया दृष्टिकोण तेज़ था। – pcent
आपको प्रदर्शन को बढ़ाने के लिए अपने PostgreSQL सर्वर को भी ठीक करना चाहिए। पढ़ें: http://wiki.postgresql.org/wiki/Performance_Optimization – pcent
याह, मुझे लगता है कि दिशानिर्देश यह कहने के लिए योग्य होना चाहिए कि एक प्रति व्यक्ति INSERT कथन के एक सेट से तेज है, प्रति पंक्ति एक। INSERT ... डेटा को कॉपी करने के लिए चुनें, मुझे लगता है कि निष्पादक के बाहर डेटा पारित नहीं किया जा रहा है क्योंकि मुझे लगता है कि इष्टतम था। – araqnid