【发布时间】:2015-02-05 11:51:39
【问题描述】:
我正在使用 psycopg2 查询 Postgresql 数据库并尝试处理大约 380M 行的表中的所有行。只有 3 列(id1、id2、count)都是整数类型。但是,当我运行下面简单的选择查询时,Python 进程开始消耗越来越多的内存,直到它被操作系统杀死。
最小的工作示例(假设 mydatabase 存在并包含一个名为 mytable 的表):
import psycopg2
conn = psycopg2.connect("dbname=mydatabase")
cur = conn.cursor()
cur.execute("SELECT * FROM mytable;")
此时程序开始消耗内存。
我看了看,Postgresql 进程运行良好。它使用了相当多的 CPU,这很好,而且内存量非常有限。
我期待 psycopg2 返回一个迭代器,而不尝试缓冲来自选择的所有结果。然后我可以重复使用cur.fetchone() 来处理所有行。
那么,如何在不耗尽可用内存的情况下从 380M 的行表中进行选择?
【问题讨论】:
标签: python postgresql psycopg2