PGresult pointer and memory usage

Started by Jeff Davisabout 21 years ago3 messagesgeneral
Jump to latest
#1Jeff Davis
pgsql@j-davis.com

When you do a PQexec call in libpq, does PostgreSQL produce the entire
result in memory on the server side, and then does libpq hold the entire
result in memory after it retrieves it?

The only time that the server sends parts of the result at a time is
with a cursor, right? And libpq always holds the data that it gets back,
right?

I guess what I'm asking is, where is the PGresult data actually stored,
and how much of it is stored in the client application at a time?

Regards,
Jeff Davis

#2Martijn van Oosterhout
kleptog@svana.org
In reply to: Jeff Davis (#1)
Re: PGresult pointer and memory usage

From what I understand:

On Mon, Jan 24, 2005 at 12:14:09PM -0800, Jeff Davis wrote:

When you do a PQexec call in libpq, does PostgreSQL produce the entire
result in memory on the server side, and then does libpq hold the entire
result in memory after it retrieves it?

The server sends the data straight and then forgets it, but the client
library stores all the results before returning.

The only time that the server sends parts of the result at a time is
with a cursor, right? And libpq always holds the data that it gets back,
right?

In a sense. The result of a FETCH is the whole resultset for that
statement, but it keeps the query around for other FETCHes. I don't
believe it holds the entire result (although maybe with a sort...???)

Hope this helps,
--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/

Show quoted text

Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a
tool for doing 5% of the work and then sitting around waiting for someone
else to do the other 95% so you can sue them.

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Jeff Davis (#1)
Re: PGresult pointer and memory usage

Jeff Davis <jdavis-pgsql@empires.org> writes:

When you do a PQexec call in libpq, does PostgreSQL produce the entire
result in memory on the server side, and then does libpq hold the entire
result in memory after it retrieves it?

No, and yes.

regards, tom lane