Re: Resetting libpq connections after an app error

From: Daniele Varrazzo <daniele(dot)varrazzo(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Martijn van Oosterhout <kleptog(at)svana(dot)org>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Resetting libpq connections after an app error
Date: 2012-10-06 11:48:29
Message-ID: CA+mi_8b06dJDKT=bEFS4PrMXBCSqtTbZ0=A4ufZvQ+_XKsqL8A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Sat, Jul 21, 2012 at 5:36 PM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> Martijn van Oosterhout <kleptog(at)svana(dot)org> writes:
>> On Sat, Jul 21, 2012 at 01:08:58AM +0100, Daniele Varrazzo wrote:
>>> In a libpq application, if there is an application error between
>>> PQsendQuery and PQgetResult, is there a way to revert a connection
>>> back to an usable state (i.e. from transaction status ACTIVE to IDLE)
>>> without using the network in a blocking way? We are currently doing
>
>> There is PQreset(), which also exists in a non-blocking variant.
>
> Note that PQreset essentially kills the connection and establishes a new
> one, which might not be what Daniele is looking for. The alternative
> approach is to issue PQcancel and then just let the query flush out as
> you normally would in an async application, ie PQisBusy/PQconsumeInput
> until ready, then PQgetResult (which you throw away), repeat until you
> get NULL.

I'm back on this issue. I've tested the PQcancel approach, but blocks
as well on send()/recv(), and given the constraint resources it is
bound to use (to be called from a signal handler) I assume there is no
workaround for it.

The PQreset approach has the shortcoming of discarding the session
configuration that somebody may have created in Pythonland: a state
with a connection made but not configured would be something a client
program is probably not prepared to handle.

I think a plain disconnection would be much easier to handle for
long-running python program: a long-running one should probably
already cope with a broken connection, a short-lived one would benefit
of working SIGINT.

If you have other suggestions I'd be glad to know, thank you.

-- Daniele

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Marc Balmer 2012-10-06 12:46:03 Re: Add FET to Default and Europe.txt
Previous Message Bruce Momjian 2012-10-06 11:29:29 Re: Add FET to Default and Europe.txt