Re: How to check for server availability? [v9.3.1, Linux]

From: Vincenzo Romano <vincenzo(dot)romano(at)notorand(dot)it>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: PostgreSQL General <pgsql-general(at)postgresql(dot)org>
Subject: Re: How to check for server availability? [v9.3.1, Linux]
Date: 2012-05-18 14:09:37
Message-ID: CAHjZ2x6bJ4OmwRMQxVfRaFr1fzV-Zut_CaGmvzCuvkJxEAkwdQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

2012/5/18 Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>:
> Vincenzo Romano <vincenzo(dot)romano(at)notorand(dot)it> writes:
>> I'd need to check from a C language program whether the server is
>> running or not.
>> I was planning to use either "PGPing PQping(const char *conninfo)" or
>> "ConnStatusType PQstatus(const PGconn *conn)".
>> I have my program running and checking from time to time whether the
>> connection is kicking and alive.
>> In order to test the things I've done the following: while the program
>> is waiting for input I simply restart the postgresql server.
>> The issue is thayt both functions return PQPING_OK and CONNECTION_OK
>> respectively.
>> When I forward the request, I get an error: "FATAL:  terminating
>> connection due to administrator command".
>> How can I reliably check the server status?
>
> You are not actually interested in checking the server status; you
> evidently want to know about the health of an existing connection.
> PQping will not help that because it is meant to see if the server
> would accept a new connection.  PQstatus is not tremendously helpful
> either since it doesn't issue any new server traffic; it's just for
> seeing if the operations so far were OK.  I think issuing a new
> dummy query (an empty string would do) is your best bet.  But why
> bother?  Just send your next command, whatever it is.  If you don't
> have another useful command to issue, you're just wasting bandwidth
> and server cycles.

Well, a reason to check the connection health is to understand whether
it neeeds a reconnection or not.
PQping is actually useless: if the database restarted, PQping says
it's OK, but the connection is gone.
You said enough about PQstatus. So issuing a "blank" command seems to
be a good idea. Possibly the only one.

Well, a "ping" function trying to use the current "PGconn*" to ping
the server would make a lot of sense, though.
Thanks a lot, Tom, for your hint.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Chris Angelico 2012-05-18 14:18:21 Re: How to check for server availability? [v9.3.1, Linux]
Previous Message leaf_yxj 2012-05-18 13:54:22 Re: How to write a script to analyze and vacuum all the tables in the system catalog?Thanks.