Si está usando psycopg2, querrá usar un cursor con nombre, de lo contrario, intentará leer todos los datos de la consulta en la memoria a la vez.
cursor = conn.cursor("some_unique_name")
cursor.execute("SELECT aid FROM pgbench_accounts")
for record in cursor:
something(record)
Esto obtendrá los registros del servidor en lotes de 2000 (valor predeterminado de itersize
) y luego distribuirlos en el bucle uno a la vez.