我正在使用psycopg2查询Postgresql数据库,并试图处理一个大约有380M行的表中的所有行.只有3列(id1、id2、count)都是整数类型.然而,当我运行下面简单的select查询时,Python进程开始消耗越来越多的内存,直到被操作系统杀死.
最简单的工作示例(假设mydatabase存在并包含一个名为mytable的表):
import psycopg2
conn = psycopg2.connect("dbname=mydatabase")
cur = conn.cursor()
cur.execute("SELECT * FROM mytable;")
此时,程序开始消耗内存.
我看了一下,Postgresql过程运行良好.它使用了相当多的CPU,这很好,而且内存非常有限.
我希望psycopg2返回一个迭代器,而不try 缓冲来自select的所有结果.然后我可以重复使用cur.fetchone()
来处理所有行.
那么,如何在不耗尽可用内存的情况下从380M行表中进行 Select 呢?