PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

psycopg2 membocorkan memori setelah permintaan besar

Saya mengalami masalah yang sama dan setelah beberapa jam darah, keringat dan air mata, menemukan jawabannya hanya membutuhkan penambahan satu parameter.

Alih-alih

cursor = conn.cursor()

tulis

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

atau lebih sederhana lagi

cursor = conn.cursor("my_cursor_name")

Detailnya dapat ditemukan di http://initd.org/psycopg/docs/usage.html#server-side-cursors

Saya menemukan instruksinya sedikit membingungkan karena saya pikir saya perlu menulis ulang SQL saya untuk memasukkan "DECLARE my_cursor_name ...." dan kemudian "FETCH count 2000 FROM my_cursor_name" tetapi ternyata psycopg melakukan itu semua untuk Anda di bawah tudung jika Anda hanya menimpa parameter default "name=None" saat membuat kursor.

Saran di atas untuk menggunakan fetchone atau fetchmany tidak menyelesaikan masalah karena, jika Anda membiarkan parameter nama tidak disetel, psycopg akan secara default mencoba memuat seluruh kueri ke dalam ram. Satu-satunya hal lain yang mungkin perlu Anda lakukan (selain mendeklarasikan parameter nama) adalah mengubah atribut cursor.itersize dari default 2000 menjadi 1000 jika Anda masih memiliki terlalu sedikit memori.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. memulai postgresql dan pgadmin di windows tanpa instalasi

  2. Setel ulang kunci utama PostgreSQL ke 1

  3. GROUP BY dan COUNT di PostgreSQL

  4. Bagaimana make_interval() Bekerja di PostgreSQL

  5. Lewati beberapa set atau larik nilai ke suatu fungsi