Verwenden Sie stattdessen einen Cursor. Die Verwendung von OFFSET und LIMIT ist ziemlich teuer - da pg eine OFFSET-Zeile ausführen, verarbeiten und überspringen muss. OFFSET ist wie "Zeilen überspringen", das ist teuer.
Cursor erlaubt eine Iteration über eine Abfrage.
BEGIN
DECLARE C CURSOR FOR SELECT * FROM big_table;
FETCH 300 FROM C; -- get 300 rows
FETCH 300 FROM C; -- get 300 rows
...
COMMIT;
Wahrscheinlich können Sie einen serverseitigen Cursor ohne explizite Verwendung der DECLARE-Anweisung verwenden, nur mit Unterstützung in psycopg (Suchabschnitt über serverseitige Cursor).