Re: Re: [BUGS] BUG #5650: Postgres service showing as stopped when in fact it is running - Mailing list pgsql-hackers
From | Bruce Momjian |
---|---|
Subject | Re: Re: [BUGS] BUG #5650: Postgres service showing as stopped when in fact it is running |
Date | |
Msg-id | 201011121647.oACGlRF10346@momjian.us Whole thread Raw |
In response to | Re: Re: [BUGS] BUG #5650: Postgres service showing as stopped when in fact it is running (Tom Lane <tgl@sss.pgh.pa.us>) |
Responses |
Re: Re: [BUGS] BUG #5650: Postgres service showing as
stopped when in fact it is running
|
List | pgsql-hackers |
Tom Lane wrote: > Bruce Momjian <bruce@momjian.us> writes: > > Uh, I still cannot reproduce the failure: > > I would imagine you need -w option on the start. The whole issue > here is whether start's wait-for-server-start code works. Thanks, I am now able to reproduce this. I was able to get this to report the .pgpass problem: $ psql postgres psql: FATAL: password authentication failed for user "postgres" password retrieved from file "/u/postgres/.pgpass" $ pg_ctl stop waiting for server to shut down.... done server stopped $ pg_ctl -w -l /dev/null start waiting for server to start....FATAL: password authentication failed for user "postgres" password retrieved from file "/u/postgres/.pgpass" .FATAL: password authentication failed for user "postgres" password retrieved from file "/u/postgres/.pgpass" .FATAL: password authentication failed for user "postgres" password retrieved from file "/u/postgres/.pgpass" .^C I basically report the connection error string if it starts with "FATAL:". I originally tried to check for an ERRCODE_INVALID_PASSWORD error field (see // comments), but it seems there is no way to access this, i.e. PQgetResult(conn) on a connection failure is always NULL. Anyway, perhaps FATAL is a better test because it will report any major failure, not just a .pgpass one. Patch attached. -- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + It's impossible for everything to be true. + diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c index 14d36b5..df71c16 100644 *** a/src/bin/pg_ctl/pg_ctl.c --- b/src/bin/pg_ctl/pg_ctl.c *************** typedef enum *** 70,75 **** --- 70,78 ---- } CtlCommand; #define DEFAULT_WAIT 60 + // + ///* This is part of the protocol so just define it */ + //#define ERRCODE_INVALID_PASSWORD "28P01" static bool do_wait = false; static bool wait_set = false; *************** test_postmaster_connection(bool do_check *** 511,516 **** --- 514,523 ---- if ((conn = PQconnectdb(connstr)) != NULL && (PQstatus(conn) == CONNECTION_OK || PQconnectionNeedsPassword(conn))) + // /* only works with >= 9.0 servers */ + // (PQgetResult(conn) && + // strcmp(PQresultErrorField(PQgetResult(conn), PG_DIAG_SQLSTATE), + // ERRCODE_INVALID_PASSWORD) == 0))) { PQfinish(conn); success = true; *************** test_postmaster_connection(bool do_check *** 518,523 **** --- 525,533 ---- } else { + /* report fatal errors like invalid .pgpass passwords */ + if (strncmp(PQerrorMessage(conn), "FATAL:", strlen("FATAL:")) == 0) + fputs(PQerrorMessage(conn), stderr); PQfinish(conn); #if defined(WIN32)
pgsql-hackers by date: