PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

psycopg2 बड़ी क्वेरी के बाद मेमोरी लीक कर रहा है

मैं इसी तरह की समस्या में भाग गया और कुछ घंटों के खून, पसीने और आँसुओं के बाद, उत्तर पाया कि बस एक पैरामीटर को जोड़ने की आवश्यकता है।

इसके बजाय

cursor = conn.cursor()

लिखें

cursor = conn.cursor(name="my_cursor_name")

या सरल अभी तक

cursor = conn.cursor("my_cursor_name")

विवरण http://initd.org/psycopg/docs/usage.html#server-side-cursors

पर पाए जाते हैं

मैंने निर्देशों को थोड़ा भ्रमित करने वाला पाया, हालांकि मुझे "DECLARE my_cursor_name ...." और फिर "FETCH काउंट 2000 FROM my_cursor_name" शामिल करने के लिए अपने SQL को फिर से लिखना होगा, लेकिन यह पता चला है कि psycopg आपके लिए यह सब करता है यदि आप कर्सर बनाते समय केवल "नाम =कोई नहीं" डिफ़ॉल्ट पैरामीटर को अधिलेखित कर देते हैं तो हुड।

फ़ेचोन या फ़ेचमैनी का उपयोग करने का सुझाव समस्या का समाधान नहीं करता है, क्योंकि यदि आप नाम पैरामीटर को सेट किए बिना छोड़ देते हैं, तो psycopg डिफ़ॉल्ट रूप से संपूर्ण क्वेरी को रैम में लोड करने का प्रयास करेगा। केवल दूसरी चीज जो आपको करने की आवश्यकता हो सकती है (नाम पैरामीटर घोषित करने के अलावा) कर्सर को बदलना है। यदि आपके पास अभी भी बहुत कम स्मृति है तो डिफ़ॉल्ट 2000 से विशेषता को 1000 कहें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ENUM डेटा प्रकार को पोस्टग्रेज करता है या CONSTRINT की जांच करता है?

  2. विभिन्न डेटाटाइप के साथ विदेशी कुंजी सेट करना

  3. मैं अपने मौजूदा रेल ऐप को उसकेोकू पर कैसे स्थानांतरित करूं? (एसक्लाइट पोस्टग्रेज करने के लिए)

  4. PostgreSQL यूजर पासवर्ड कैसे बदलें?

  5. डेटा को सॉर्ट न करें कैसे रखें?