Um einen Cursor zum Abrufen von Daten zu verwenden, müssen Sie den ResultSet-Typ von ResultSet.TYPE_FORWARD_ONLY (Standardeinstellung) festlegen und zusätzlich zum Festlegen einer Abrufgröße Autocommit auf „false“ setzen. Darauf wird in dem von Ihnen verlinkten Dokument verwiesen, aber Sie haben nicht ausdrücklich erwähnt, dass Sie diese Schritte ausgeführt haben.
Seien Sie vorsichtig mit dem Partitionierungsschema von PostgreSQL. Es macht wirklich sehr schreckliche Dinge mit dem Optimierer und kann massive Leistungsprobleme verursachen, wo es keine geben sollte (abhängig von den Besonderheiten Ihrer Daten). Besteht Ihre Zeile auf jeden Fall nur aus 1,8 Millionen Zeilen? Es gibt keinen Grund dafür, dass es allein aufgrund der Größe partitioniert werden müsste, vorausgesetzt, es ist angemessen indiziert.