I like Craig's idea to use the jdk7 temp file handling. I propose to this project keep it simple (at least at first) and start with this as a jdbc41 only feature.
Many people use pgjdbc for OLTP style transactions and wouldn't ever want to spill to disk. This is why (IMHO) the algorithm that determines under which stress condition this feature uses (assuming it is enabled) is so critical.
this still won't address the issue that the postgresql server itself ALSO marshals the entire result set into ITS memory before sending it to the client. Really, using cursors for large result-sets is the correct way to go.
Clearly, but not everyone has this option. I don't really see this as a valid reason not to implement this.