Afin d'utiliser un curseur pour récupérer des données, vous devez définir le type ResultSet de ResultSet.TYPE_FORWARD_ONLY (la valeur par défaut) et autocommit sur false en plus de définir une taille de récupération. Cela est référencé dans le document auquel vous avez lié, mais vous n'avez pas explicitement mentionné que vous avez suivi ces étapes.
Soyez prudent avec le schéma de partitionnement de PostgreSQL. Il fait vraiment des choses très horribles avec l'optimiseur et peut causer des problèmes de performances massifs là où il ne devrait pas y en avoir (selon les spécificités de vos données). Dans tous les cas, votre ligne ne fait-elle que 1,8 million de lignes ? Il n'y a aucune raison pour qu'il doive être partitionné en fonction de la taille uniquement, étant donné qu'il est indexé de manière appropriée.