Я использую psycopg2 для запроса базы данных Postgresql и пытается обработать все строки из таблицы с примерно 380M строк. Есть только 3 столбца (id1, id2, count) всего типа integer. Однако, когда я запускаю простой запрос выбора ниже, процесс Python начинает потреблять все больше и больше памяти, пока он не будет убит ОС.
Минимальный рабочий пример (предполагается, что mydatabase существует и содержит таблицу под названием mytable):
import psycopg2
conn = psycopg2.connect("dbname=mydatabase")
cur = conn.cursor()
cur.execute("SELECT * FROM mytable;")
В этот момент программа начинает потреблять память.
Я посмотрел, и процесс Postgresql ведет себя хорошо. Он использует справедливый бит процессора, который хорош и очень ограниченный объем памяти.
Я ожидал, что psycopg2 вернет итератор, не пытаясь выгрузить все результаты из выбора. Затем я мог бы использовать cur.fetchone()
для обработки всех строк.
Итак, как я могу выбрать из таблицы строк 380M без использования доступной памяти?