Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.databases.postgresql > #776

Re: Anyone here do anything with libpq?

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar


Thread

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