Para usar un cursor para recuperar datos, debe establecer el tipo de ResultSet de ResultSet.TYPE_FORWARD_ONLY (el valor predeterminado) y confirmar automáticamente en falso además de establecer un tamaño de recuperación. Eso se menciona en el documento al que se vinculó, pero no mencionó explícitamente que hizo esos pasos.
Tenga cuidado con el esquema de partición de PostgreSQL. Realmente hace cosas muy horribles con el optimizador y puede causar problemas de rendimiento masivos donde no debería haber (dependiendo de las especificaciones de sus datos). En cualquier caso, ¿su fila tiene solo 1,8 millones de filas? No hay ninguna razón por la que deba particionarse solo en función del tamaño dado que está indexado correctamente.