mirror of
https://github.com/postgres/postgres.git
synced 2025-04-24 10:47:04 +03:00
Fix pg_isready to handle -d option properly.
Previously, -d option for pg_isready was broken. When the name of the database was specified by -d option, pg_isready failed with an error. When the conninfo specified by -d option contained the setting of the host name but not Numeric IP address (i.e., hostaddr), pg_isready displayed wrong connection message. -d option could not handle a valid URI prefix at all. This commit fixes these bugs of pg_isready. Backpatch to 9.3, where pg_isready was introduced. Per report from Josh Berkus and Robert Haas. Original patch by Fabrízio de Royes Mello, heavily modified by me.
This commit is contained in:
parent
04eee1fa9e
commit
38f4328981
@ -31,6 +31,7 @@ main(int argc, char **argv)
|
|||||||
const char *connect_timeout = DEFAULT_CONNECT_TIMEOUT;
|
const char *connect_timeout = DEFAULT_CONNECT_TIMEOUT;
|
||||||
|
|
||||||
const char *pghost_str = NULL;
|
const char *pghost_str = NULL;
|
||||||
|
const char *pghostaddr_str = NULL;
|
||||||
const char *pgport_str = NULL;
|
const char *pgport_str = NULL;
|
||||||
|
|
||||||
#define PARAMS_ARRAY_SIZE 7
|
#define PARAMS_ARRAY_SIZE 7
|
||||||
@ -130,7 +131,10 @@ main(int argc, char **argv)
|
|||||||
/*
|
/*
|
||||||
* Get the host and port so we can display them in our output
|
* Get the host and port so we can display them in our output
|
||||||
*/
|
*/
|
||||||
if (pgdbname)
|
if (pgdbname &&
|
||||||
|
(strncmp(pgdbname, "postgresql://", 13) == 0 ||
|
||||||
|
strncmp(pgdbname, "postgres://", 11) == 0 ||
|
||||||
|
strchr(pgdbname, '=') != NULL))
|
||||||
{
|
{
|
||||||
opts = PQconninfoParse(pgdbname, &errmsg);
|
opts = PQconninfoParse(pgdbname, &errmsg);
|
||||||
if (opts == NULL)
|
if (opts == NULL)
|
||||||
@ -149,8 +153,7 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
for (opt = opts, def = defs; def->keyword; def++)
|
for (opt = opts, def = defs; def->keyword; def++)
|
||||||
{
|
{
|
||||||
if (strcmp(def->keyword, "hostaddr") == 0 ||
|
if (strcmp(def->keyword, "host") == 0)
|
||||||
strcmp(def->keyword, "host") == 0)
|
|
||||||
{
|
{
|
||||||
if (opt && opt->val)
|
if (opt && opt->val)
|
||||||
pghost_str = opt->val;
|
pghost_str = opt->val;
|
||||||
@ -161,6 +164,13 @@ main(int argc, char **argv)
|
|||||||
else
|
else
|
||||||
pghost_str = DEFAULT_PGSOCKET_DIR;
|
pghost_str = DEFAULT_PGSOCKET_DIR;
|
||||||
}
|
}
|
||||||
|
else if (strcmp(def->keyword, "hostaddr") == 0)
|
||||||
|
{
|
||||||
|
if (opt && opt->val)
|
||||||
|
pghostaddr_str = opt->val;
|
||||||
|
else if (def->val)
|
||||||
|
pghostaddr_str = def->val;
|
||||||
|
}
|
||||||
else if (strcmp(def->keyword, "port") == 0)
|
else if (strcmp(def->keyword, "port") == 0)
|
||||||
{
|
{
|
||||||
if (opt && opt->val)
|
if (opt && opt->val)
|
||||||
@ -179,7 +189,9 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
if (!quiet)
|
if (!quiet)
|
||||||
{
|
{
|
||||||
printf("%s:%s - ", pghost_str, pgport_str);
|
printf("%s:%s - ",
|
||||||
|
pghostaddr_str != NULL ? pghostaddr_str : pghost_str,
|
||||||
|
pgport_str);
|
||||||
|
|
||||||
switch (rv)
|
switch (rv)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user