I recently had to deal with a 3rd party application (without source code) that processed large result sets, and kept running out of memory on the client. I realise this was because the application didn't set a fetch size, nor turn off autocommit and so the criteria for the driver to use a cursor-based result set were not met.
Since I cannot modify the application, I instead altered the postgresql jdbc driver instead to allow two additional driver parameters - defaultFetchSize and defaultAutoCommit to override the built-in defaults (0 and true).
Anyway, it worked well for me, so for what its worth a diff is attached. All test cases still pass. If you think this is worth pursuing, let me know what else needs to be done!