Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit941c4ec

Browse files
committed
Fix pg_isready to handle conninfo properly.
pg_isready displays the host name and the port number that it uses to connectto the server. So far, pg_isready didn't use the conninfo specified in -d optionfor calculating those host name and port number. This can lead to wrong displayto a user. This commit changes pg_isready so that it uses the conninfo for thatcalculation.Original patch by Phil Sorber, modified by me.
1 parent33a4466 commit941c4ec

File tree

1 file changed

+64
-52
lines changed

1 file changed

+64
-52
lines changed

‎src/bin/scripts/pg_isready.c

Lines changed: 64 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ static void
2020
int
2121
main(intargc,char**argv)
2222
{
23-
intc,
24-
optindex,
25-
opt_index=2;
23+
intc;
2624

2725
constchar*progname;
2826

@@ -32,14 +30,22 @@ main(int argc, char **argv)
3230
constchar*pgdbname=NULL;
3331
constchar*connect_timeout=DEFAULT_CONNECT_TIMEOUT;
3432

35-
constchar*keywords[7]= {NULL};
36-
constchar*values[7]= {NULL};
33+
constchar*pghost_str=NULL;
34+
constchar*pgport_str=NULL;
35+
36+
#definePARAMS_ARRAY_SIZE7
37+
38+
constchar*keywords[PARAMS_ARRAY_SIZE];
39+
constchar*values[PARAMS_ARRAY_SIZE];
3740

3841
boolquiet= false;
3942

40-
PGPingrv;
41-
PQconninfoOption*connect_options,
42-
*conn_opt_ptr;
43+
PGPingrv;
44+
PQconninfoOption*opts=NULL;
45+
PQconninfoOption*defs=NULL;
46+
PQconninfoOption*opt;
47+
PQconninfoOption*def;
48+
char*errmsg=NULL;
4349

4450
/*
4551
* We accept user and database as options to avoid useless errors from
@@ -60,7 +66,7 @@ main(int argc, char **argv)
6066
set_pglocale_pgservice(argv[0],PG_TEXTDOMAIN("pgscripts"));
6167
handle_help_version_opts(argc,argv,progname,help);
6268

63-
while ((c=getopt_long(argc,argv,"d:h:p:qt:U:V",long_options,&optindex))!=-1)
69+
while ((c=getopt_long(argc,argv,"d:h:p:qt:U:",long_options,NULL))!=-1)
6470
{
6571
switch (c)
6672
{
@@ -106,66 +112,74 @@ main(int argc, char **argv)
106112
exit(PQPING_NO_ATTEMPT);
107113
}
108114

115+
keywords[0]="host";
116+
values[0]=pghost;
117+
keywords[1]="port";
118+
values[1]=pgport;
119+
keywords[2]="user";
120+
values[2]=pguser;
121+
keywords[3]="dbname";
122+
values[3]=pgdbname;
123+
keywords[4]="connect_timeout";
124+
values[4]=connect_timeout;
125+
keywords[5]="fallback_application_name";
126+
values[5]=progname;
127+
keywords[6]=NULL;
128+
values[6]=NULL;
129+
109130
/*
110-
*Set connection options
131+
*Get the host and port so we can display them in our output
111132
*/
112-
113-
keywords[0]="connect_timeout";
114-
values[0]=connect_timeout;
115-
keywords[1]="fallback_application_name";
116-
values[1]=progname;
117-
if (pguser)
133+
if (pgdbname)
118134
{
119-
keywords[opt_index]="user";
120-
values[opt_index]=pguser;
121-
opt_index++;
135+
opts=PQconninfoParse(pgdbname,&errmsg);
136+
if (opts==NULL)
137+
{
138+
fprintf(stderr,_("%s: %s\n"),progname,errmsg);
139+
exit(PQPING_NO_ATTEMPT);
140+
}
122141
}
123-
if (pgdbname)
142+
143+
defs=PQconndefaults();
144+
if (defs==NULL)
124145
{
125-
keywords[opt_index]="dbname";
126-
values[opt_index]=pgdbname;
127-
opt_index++;
146+
fprintf(stderr,_("%s: cannot fetch default options\n"),progname);
147+
exit(PQPING_NO_ATTEMPT);
128148
}
129149

130-
/*
131-
* Get the default host and port so we can display them in our output
132-
*/
133-
connect_options=PQconndefaults();
134-
conn_opt_ptr=connect_options;
135-
while (conn_opt_ptr->keyword)
150+
for (opt=opts,def=defs;def->keyword;def++)
136151
{
137-
if (strncmp(conn_opt_ptr->keyword,"host",5)==0)
152+
if (strcmp(def->keyword,"hostaddr")==0||
153+
strcmp(def->keyword,"host")==0)
138154
{
139-
if (pghost)
140-
{
141-
keywords[opt_index]=conn_opt_ptr->keyword;
142-
values[opt_index]=pghost;
143-
opt_index++;
144-
}
145-
elseif (conn_opt_ptr->val)
146-
pghost=conn_opt_ptr->val;
155+
if (opt&&opt->val)
156+
pghost_str=opt->val;
157+
elseif (pghost)
158+
pghost_str=pghost;
159+
elseif (def->val)
160+
pghost_str=def->val;
147161
else
148-
pghost=DEFAULT_PGSOCKET_DIR;
162+
pghost_str=DEFAULT_PGSOCKET_DIR;
149163
}
150-
elseif (strncmp(conn_opt_ptr->keyword,"port",5)==0)
164+
elseif (strcmp(def->keyword,"port")==0)
151165
{
152-
if (pgport)
153-
{
154-
keywords[opt_index]=conn_opt_ptr->keyword;
155-
values[opt_index]=pgport;
156-
opt_index++;
157-
}
158-
elseif (conn_opt_ptr->val)
159-
pgport=conn_opt_ptr->val;
166+
if (opt&&opt->val)
167+
pgport_str=opt->val;
168+
elseif (pgport)
169+
pgport_str=pgport;
170+
elseif (def->val)
171+
pgport_str=def->val;
160172
}
161-
conn_opt_ptr++;
173+
174+
if (opt)
175+
opt++;
162176
}
163177

164178
rv=PQpingParams(keywords,values,1);
165179

166180
if (!quiet)
167181
{
168-
printf("%s:%s - ",pghost,pgport);
182+
printf("%s:%s - ",pghost_str,pgport_str);
169183

170184
switch (rv)
171185
{
@@ -186,8 +200,6 @@ main(int argc, char **argv)
186200
}
187201
}
188202

189-
PQconninfoFree(connect_options);
190-
191203
exit(rv);
192204
}
193205

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp