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.
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. |