Вот 3 метода, которые могут помочь
- использовать psycopg2 именованный курсор cursor.itersize = 2000
фрагмент
with conn.cursor(name='fetch_large_result') as cursor:
cursor.itersize = 20000
query = "SELECT * FROM ..."
cursor.execute(query)
for row in cursor:
....
использовать
psycopg2 именованный курсор fetchmany (размер = 2000) фрагмент
conn = psycopg2.connect(conn_url)
cursor = conn.cursor(name='fetch_large_result')
cursor.execute('SELECT * FROM <large_table>')
while True:
# consume result over a series of iterations
# with each iteration fetching 2000 records
records = cursor.fetchmany(size=2000)
if not records:
break
for r in records:
....
cursor.close() # cleanup
conn.close()
Наконец, вы можете определить КНОПКА СВИТОК
Определить
КУРСОР СКРОСА фрагмент
BEGIN MY_WORK;
-- Set up a cursor:
DECLARE scroll_cursor_bd SCROLL CURSOR FOR SELECT * FROM My_Table;
-- Fetch the first 5 rows in the cursor scroll_cursor_bd:
FETCH FORWARD 5 FROM scroll_cursor_bd;
CLOSE scroll_cursor_bd;
COMMIT MY_WORK;
Обратите внимание Не называть курсор в psycopg2 курсор будет на стороне клиента, а не на стороне сервера.