BUG #5837: PQstatus() fails to report lost connection - Mailing list pgsql-bugs

From Murray S. Kucherawy
Subject BUG #5837: PQstatus() fails to report lost connection
Date
Msg-id 201101140136.p0E1aTFb017852@wwwmaster.postgresql.org
Whole thread Raw
Responses Re: BUG #5837: PQstatus() fails to report lost connection  (Robert Haas <robertmhaas@gmail.com>)
List pgsql-bugs
The following bug has been logged online:

Bug reference:      5837
Logged by:          Murray S. Kucherawy
Email address:      msk@cloudmark.com
PostgreSQL version: 9.0.2
Operating system:   FreeBSD
Description:        PQstatus() fails to report lost connection
Details:

I'm accessing libpq via OpenDBX, but it appears to be doing the right thing.
 This is reproducible.

1) establish a connection to postgresql
2) initiate a query, collect results, etc.; all normal
3) while client is idle, restart the server
4) initiate the very same query as before
5) call PQgetResult(), returns non-NULL
6) call PQresultStatus(), returns PGRES_FATAL_ERROR
7) call PQstatus(), returns CONNECTION_OK

This causes the caller not to try PQreset() or equivalent, because the
connection is presumably fine.  However, of course, no further queries will
succeed.

A call to PQerrorMessage() returns the string "FATAL: terminating connection
due to administrator command", which would be expected.

I would hate to have to have the application pull that out each time and
look for this specific string to detect the dead connection.

What happens internally prior to (7) appears to be a bug.  I looked through
the "TODO" list and didn't see any mention of this.

pgsql-bugs by date:

Previous
From: "frank"
Date:
Subject: Re: BUG #5816: index not used in function
Next
From: Craig Ringer
Date:
Subject: Re: BUG #5829: No buffer Space Available(maximum connection reached?) from postgres edb driver