Thread: Disable result buffering to frontend clients

Disable result buffering to frontend clients

From
Konstantinos Krikellas
Date:
Hi,

I am trying to execute some queries in PostgreSQL that produce a large
number of results and I do not want to display the output (redirect it
to /dev/null). I have tried the psql client with \o /dev/null option,
JDBC and libpq functions, but all of them have to buffer totally the
result before redirecting it. Is there any way to disable result
buffering, either on the client or on the server side? Note that the
EXPLAIN ANALYSE does not produce consistent estimations as it seems to
avoid calling the result tuple construction function. This is concluded
by the fact that augmenting the projection width hardly changes the
execution time, which is incompatible with the supplementary field copy
cost.

Thanks.
Konstantinos Krikellas


Re: Disable result buffering to frontend clients

From
Richard Huxton
Date:
Konstantinos Krikellas wrote:
> Hi,
>
> I am trying to execute some queries in PostgreSQL that produce a large
> number of results and I do not want to display the output (redirect it
> to /dev/null). I have tried the psql client with \o /dev/null option,
> JDBC and libpq functions, but all of them have to buffer totally the
> result before redirecting it. Is there any way to disable result
> buffering, either on the client or on the server side?

Well, you could use a cursor, but that could change the plan (I believe
it favours plans that return the first result quickly).

You could have a function that used FOR-IN-EXECUTE to run a query for
you then just loop through the results, doing nothing. That would keep
everything server-side.

If you really want to duplicate all the query costs except client-side
buffering, the simplest might be to just hack the libpq source to
discard any query results rather than buffering them - shouldn't be too
difficult.

--
   Richard Huxton
   Archonet Ltd