Använd en markör istället. Att använda en OFFSET och LIMIT är ganska dyrt - eftersom pg måste utföra en fråga, bearbeta och hoppa över en OFFSET-rader. OFFSET är som att "hoppa över rader", det är dyrt.
Markören tillåter en iteration över en fråga.
BEGIN
DECLARE C CURSOR FOR SELECT * FROM big_table;
FETCH 300 FROM C; -- get 300 rows
FETCH 300 FROM C; -- get 300 rows
...
COMMIT;
Förmodligen kan du använda en markör på serversidan utan att uttryckligen använda DECLARE-satsen, bara med stöd i psycopg (sök avsnitt om markörer på serversidan).