Re: need a method to ping a running database - Mailing list pgsql-general

From Dmitry Tkach
Subject Re: need a method to ping a running database
Date
Msg-id 3EE8B86F.3080505@openratings.com
Whole thread Raw
In response to Re: need a method to ping a running database  (Steve Crawford <scrawford@pinpointresearch.com>)
Responses Re: need a method to ping a running database
List pgsql-general
Steve Crawford wrote:

>So try:
>`psql -d database -h server -c "select 'It is running'" 2>/dev/null | grep -c
>"It is running"`
>
>
It doesn't make any difference - if it is 'starting up',  you won't get
that 'it is running string' anyway...
BTW, 2>/dev/null redirect is pointless - the ERROR: stuff goes to stdout
anyway :-)

>Though I don't think the "ERROR: database is staring up" is an incorrect error
>as it still means that the database is not ready to handle queries.
>
Sure. I did not say it was "incorrect"...
But it is *different* from most if not all other errors, because it
requires a different item...
For example, if the server is dead, you are probably going to want to
restart it.... If it is 'starting up' though, you just need to wait a
little bit.

> Still, I
>think it's safer to look for the existence of expected results that the
>absence of specific error messages.
>
I don't know what is "safer" about it... :-)
It seems to be more like a question of taste...
You must be one of those guys who prefers to write something like
if (condition == FALSE)  instead of if (!condition)

:-)

Dima


>
>Cheers,
>Steve
>
>On Wednesday 11 June 2003 6:42 pm, Dima Tkach wrote:
>
>
>>What about
>>
>>down= \
>>`psql -d database -h server -c 'select 1;' 2>&1 | grep -c '^ERROR'`
>>
>>?
>>
>>Dima.
>>
>>P.S. One thing to be cautious about is that if it has just been started,
>>you'll get something like 'ERROR: The database is starting up.', that
>>will get counted as an error (probably incorrectly)... So, the real
>>implementation has to be a little more elaborate then that to be able to
>>catch and handle that situation...
>>
>>Travis Hume wrote:
>>
>>
>>>I need a shell scriptable method to determine if a postgresql database
>>>is running and accepting connections.
>>>
>>>I've written a script to start out postgresql database and I was using:
>>>"pg_ctl status"
>>>
>>>to determine if the database had been started.  There are a couple of
>>>problems with this method.  It seems that if you start postgresql and
>>>then issue a "kill -9" on the postmaster processes a .pid file is left
>>>behind (understandable), but then if you run "pg_ctl status" it will
>>>immediately report that the database is running and give you the pid
>>>number and whatever else.  This is a bit misleading to say the least.
>>>To solve this problem I changed my db_ping() function to be more like
>>>"ps ax |grep -q postmaster && pg_ctl status".  This works better, but
>>>there is still a problem.
>>>
>>>The .pid file is being written immediately, not when the database is
>>>actually up and accepting connections.  This causes my java app to try
>>>and open the database and setup a connection pool before it should.
>>>
>>>I need a shell scriptable method to determine if the database is started
>>>and ready to accept connections.
>>>
>>>
>>>
>>>---------------------------(end of broadcast)---------------------------
>>>TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
>>>
>>>
>>---------------------------(end of broadcast)---------------------------
>>TIP 5: Have you checked our extensive FAQ?
>>
>>http://www.postgresql.org/docs/faqs/FAQ.html
>>
>>



pgsql-general by date:

Previous
From: Steve Crawford
Date:
Subject: Re: need a method to ping a running database
Next
From: Justin Clift
Date:
Subject: Re: [HACKERS] SAP and MySQL ... [and Benchmark]