Wow... really glad Tom chimed in on this. I've been promoting/using PG as an enterprise-class database for over a decade and I was struggling with the "fact" that the server doesn't iterate thru a cursor without bringing it all into memory.
On Mon, Sep 22, 2014 at 8:46 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
John R Pierce <pierce@hogranch.com> writes: > 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.
If it actually did that, then there would be an issue ... but it never has, and very likely never will. The server sends rows on-the-fly as they're computed. That is indeed the very reason that client libraries tend to want to accumulate full resultsets: they're hiding that behavior from applications, so as to make it look like you get either an error or a full resultset, not some rows and then an error.