sql >> データベース >  >> RDS >> PostgreSQL

大規模なクエリ後にpsycopg2がメモリリークしている

    同様の問題が発生し、数時間の血、汗、涙の後、答えは1つのパラメータを追加するだけでよいことがわかりました。

    代わりに

    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

    をご覧ください。

    SQLを書き直して「DECLAREmy_cursor_name....」を含め、次に「FETCH count 2000 FROM my_cursor_name」を含める必要があるという点で、手順が少しわかりにくいことがわかりましたが、psycopgがすべてを実行していることがわかりました。カーソルを作成するときに「name=None」のデフォルトパラメータを上書きするだけの場合はフード。

    上記のfetchoneまたはfetchmanyの使用の提案では、nameパラメーターを未設定のままにすると、psycopgはデフォルトでクエリ全体をRAMにロードしようとするため、問題は解決しません。 (名前パラメータを宣言する以外に)必要になる可能性がある他の唯一のことは、cursor.itersize属性をデフォルトの2000から、まだメモリが少なすぎる場合は1000に変更することです。



    1. Entity FrameworkのOperatorのように?

    2. 出力パラメータを使用してストアドプロシージャを実行しますか?

    3. isqlで完全なエラーメッセージを取得する

    4. 2つの接続されたテーブルを作成するためのデータベースの選択?