Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.databases.postgresql > #776
| From | Rainer Weikusat <rweikusat@talktalk.net> |
|---|---|
| Newsgroups | comp.databases.postgresql |
| Subject | Re: Anyone here do anything with libpq? |
| Date | 2017-05-16 20:52 +0100 |
| Message-ID | <87r2zo8tpy.fsf@doppelsaurus.mobileactivedefense.com> (permalink) |
| References | <P6jSA.83362$qj5.21666@fx39.iad> <871srq6sfx.fsf@doppelsaurus.mobileactivedefense.com> <weESA.199699$kI.27501@fx43.iad> |
DFS <nospam@dfs.com> writes: > On 5/15/2017 11:38 AM, Rainer Weikusat wrote: >> DFS <nospam@dfs.com> writes: >>> https://www.postgresql.org/docs/9.6/static/libpq.html >>> >>> <quote> >>> PQclear >>> Frees the storage associated with a PGresult. Every command result >>> should be freed via PQclear when it is no longer needed. >>> >>> void PQclear(PGresult *res); >>> >>> You can keep a PGresult object around for as long as you need it; it >>> does not go away when you issue a new command, nor even if you close >>> the connection. To get rid of it, you must call PQclear. Failure to do >>> this will result in memory leaks in your application. >>> </quote> >>> >>> 'when it is no longer needed' sounds like it can be cleared once, at >>> the end of the script. >> >> There seems to be some kind of fundamental misunderstanding about the >> nature of 'a result set' here. Specifically, >> >> PGresult *res; >> >> is a C pointer to a PGresult (structure) and in order to avoid memory >> leaks, the result this pointer points to has to be freed before the >> pointer is overwritten aka reused. >> >> There's no need to free the result if the pointer won't be reused, IOW, >> if the application is going to end next, anyway. > > The question is, if I use a PGresult 10x during a program, should I > clear it between each use, or is one clear at the end OK? Well, you can't do this (as I already wrote): Queries return pointers to result objects, not result objects. And if you overwrite a pointer variable (type PGresult *) pointing to the last result with a pointer to the next result, the old result will be leaked.
Back to comp.databases.postgresql | Previous | Next — Previous in thread | Next in thread | Find similar
Anyone here do anything with libpq? DFS <nospam@dfs.com> - 2017-05-15 10:41 -0400
Re: Anyone here do anything with libpq? Rainer Weikusat <rweikusat@talktalk.net> - 2017-05-15 16:38 +0100
Re: Anyone here do anything with libpq? DFS <nospam@dfs.com> - 2017-05-16 10:45 -0400
Re: Anyone here do anything with libpq? Rainer Weikusat <rweikusat@talktalk.net> - 2017-05-16 20:52 +0100
Re: Anyone here do anything with libpq? Robert Klemme <shortcutter@googlemail.com> - 2017-05-15 19:54 +0200
Re: Anyone here do anything with libpq? DFS <nospam@dfs.com> - 2017-05-16 14:01 -0400
Re: Anyone here do anything with libpq? Robert Klemme <shortcutter@googlemail.com> - 2017-05-16 23:04 +0200
Re: Anyone here do anything with libpq? George Neuner <gneuner2@comcast.net> - 2017-05-17 08:40 -0400
csiph-web