Re: PQstatus() detect change in connection...

From: Matthew Hagerty <mhagerty(at)voyager(dot)net>
To: "Mark Pritchard" <mark(at)tangent(dot)net(dot)au>, <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: PQstatus() detect change in connection...
Date: 2001-10-18 04:19:05
Message-ID: 5.1.0.14.2.20011018001654.01d49128@pop.voyager.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

I am trying to re-establish a connection, however, I cannot afford to issue
a query to determine if the connection still exists. I'm writing a server
that uses the asynchronous query processing functions and speed is an
issue. Queries are slow compared to what the server does and it cannot
wait around for a query to finish just to see if another query *should* be
attempted based on the connection status.

I've been digging into the libpq code to see what is going on, maybe I can
gleam a little hint or two there... Anyone know a good *fast* way to test
if a socket is still valid?

Thanks,
Matthew

At 11:51 AM 10/18/2001 +1000, Mark Pritchard wrote:
>I presume you are trying to re-establish a connection automatically...if
>that doesn't apply, ignore the rest of this email :)
>
>The way I interpreted the docs was that you can use the return codes from
>PQexec() to establish whether the command was sent to the backend correctly.
>PQresultStatus() returns whether the command was syntactically
>correct/executed OK.
>
>I've attached a chunk of code from a back-end independent DB driver
>(supports Oracle, PgSQL, MySQL through the same front end API), which
>implements this auto-reconnect. Take a look at the sqlExec() method.
>
>This code successfully recovers when used in a client connection pool in the
>following sequence:
>
>1) start postmaster
>2) connect through pool/driver
>3) issue SQL statements
>4) kill postmaster
>5) start postmaster
>6) issue SQL statements
>7) driver detects connection invalid, reconnects and re-issues
>automatically.
>
>Perhaps those infinitely more knowledgeable on the list have a better/more
>correct way of doing things?
>
>Cheers,
>
>Mark Pritchard
>
> > -----Original Message-----
> > From: pgsql-hackers-owner(at)postgresql(dot)org
> > [mailto:pgsql-hackers-owner(at)postgresql(dot)org]On Behalf Of Matthew Hagerty
> > Sent: Thursday, 18 October 2001 10:47 AM
> > To: pgsql-hackers(at)postgresql(dot)org
> > Subject: [HACKERS] PQstatus() detect change in connection...
> >
> >
> > Greetings,
> >
> > PostgreSQL 7.1.3, FreeBSD-4.3-RELEASE, gcc 2.95.3
> >
> > I'm trying to attempt to detect a failed backend connection, but
> > a call to
> > PQstatus() always returns the state of the backend when the call was
> > made. For example, take this test code:
> >
> > PGconn *pgConn;
> > PGresult *pgRes;
> > int fdPGconn;
> >
> > int i = 0;
> > int iNewState = 0;
> > int iOldState = 60;
> >
> > pgConn = PQconnectdb("dbname=pglogd user=postgres");
> >
> > while ( i == 0 )
> > {
> > iNewState = PQstatus(pgConn);
> >
> > if ( iNewState != iOldState )
> > {
> > iOldState = iNewState;
> > printf("Connection State [%d]\n", iNewState);
> >
> > fdPGconn = PQsocket(pgConn);
> > printf("Connection Socket [%d]\n", fdPGconn);
> > }
> >
> > sleep(1);
> > }
> >
> > PQfinish(pgConn);
> >
> > If you start this with the backend running, the status is CONNECTION_OK,
> > then pull the plug on the backend, the call to PQstatus() will
> > still return
> > CONNECTION_OK, even though the backend is not running. Start
> > this program
> > with the backend not running, then start the backend, PQstatus()
> > never sees
> > the backend come to life...
> >
> > Am I reading PQstatus() wrong? Is there any way to detect when
> > the backend
> > goes down or comes back up?
> >
> > Thanks,
> > Matthew
> >
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 2: you can get off all lists at once with the unregister command
> > (send "unregister YourEmailAddressHere" to majordomo(at)postgresql(dot)org)
> >
>

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Hiroshi Inoue 2001-10-18 06:21:08 Re: To Postgres Devs : Wouldn't changing the select limit
Previous Message Denis A Ustimenko 2001-10-18 03:07:42 Re: compiling libpq++ on Solaris with Sun SPRO6U2 (fixed