Re: Retrieving query results

From: Michael Paquier <michael(dot)paquier(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Igor Korot <ikorot01(at)gmail(dot)com>, pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: Retrieving query results
Date: 2017-08-28 06:05:14
Message-ID: CAB7nPqRnDMMKybjdC5fFd4XyDaE65UkMB2kAZ_NRm1T=AcZgCQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Sun, Aug 27, 2017 at 12:12 AM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> Michael Paquier <michael(dot)paquier(at)gmail(dot)com> writes:
>> On Fri, Aug 25, 2017 at 8:10 AM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
>>> I think the real problem occurs where we realloc the array bigger.
>
>> Looking at the surroundings, I think that it would be nice to have
>> pqAddTuple and PQsetvalue set an error message with this patch.
>
> Yeah, I was thinking about that myself - the existing design presumes
> that the only possible reason for failure of pqAddTuple is OOM, but
> it'd be better to distinguish "too many tuples" from true OOM. So
> we should also refactor to make pqAddTuple responsible for setting
> the error message. Might be best to do the refactoring first.

Attached are two patches:
1) 0001 refactors the code around pqAddTuple to be able to handle
error messages and assign them in PQsetvalue particularly.
2) 0002 adds sanity checks in pqAddTuple for overflows, maximizing the
size of what is allocated to INT_MAX but now more.

pqRowProcessor() still has errmsgp, but it is never used on HEAD. At
least with this set of patches it comes to be useful. We could rework
check_field_number() to use as well an error message string, but I
have left that out to keep things simple. Not sure if any complication
is worth compared to just copying the error message in case of an
unmatching column number.

Attached is as well a small program I have used to test PQsetvalue
through PQcopyResult to see if results get correctly allocated at each
call, looking at the error message stacks on the way.
--
Michael

Attachment Content-Type Size
pg_copy_res.c text/x-csrc 1.1 KB
0001-Refactor-error-message-handling-in-pqAddTuple.patch application/octet-stream 4.9 KB
0002-Improve-overflow-checks-of-pqAddTuple-in-libpq.patch application/octet-stream 2.1 KB

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Michael Paquier 2017-08-28 06:34:09 Re: Extension coverage
Previous Message John Lawlor 2017-08-28 05:13:30 Installing 9.5 doesn't create 'postgres' unix account on Cent OS 7