Skip to content

Commit a37e83c

Browse files
committed
Make it easy to time out pg_isready, and make the default 3 seconds.
Along the way, add a missing line to the help message. Phil Sorber, reviewed by Fujii Masao
1 parent 88886c7 commit a37e83c

File tree

2 files changed

+48
-30
lines changed

2 files changed

+48
-30
lines changed

doc/src/sgml/ref/pg_isready.sgml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,18 @@ PostgreSQL documentation
9696
</listitem>
9797
</varlistentry>
9898

99+
<varlistentry>
100+
<term><option>-t <replaceable class="parameter">seconds</replaceable></></term>
101+
<term><option>--timeout=<replaceable class="parameter">seconds</replaceable></></term>
102+
<listitem>
103+
<para>
104+
The maximum number of seconds to wait when attempting connection before
105+
returning that the server is not responding. Setting to 0 disables. The
106+
default is 3 seconds.
107+
</para>
108+
</listitem>
109+
</varlistentry>
110+
99111
<varlistentry>
100112
<term><option>-U <replaceable class="parameter">username</replaceable></></term>
101113
<term><option>--username=<replaceable class="parameter">username</replaceable></></term>

src/bin/scripts/pg_isready.c

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,26 @@
1212
#include "postgres_fe.h"
1313
#include "common.h"
1414

15+
#define DEFAULT_CONNECT_TIMEOUT "3"
16+
1517
static void
1618
help(const char *progname);
1719

1820
int
1921
main(int argc, char **argv)
2022
{
21-
int c,optindex,opt_index = 0;
23+
int c,optindex,opt_index = 2;
2224

2325
const char *progname;
2426

2527
const char *pghost = NULL;
2628
const char *pgport = NULL;
2729
const char *pguser = NULL;
2830
const char *pgdbname = NULL;
31+
const char *connect_timeout = DEFAULT_CONNECT_TIMEOUT;
2932

30-
const char *keywords[4], *values[4];
33+
const char *keywords[7] = { NULL };
34+
const char *values[7] = { NULL };
3135

3236
bool quiet = false;
3337

@@ -44,14 +48,16 @@ main(int argc, char **argv)
4448
{"host", required_argument, NULL, 'h'},
4549
{"port", required_argument, NULL, 'p'},
4650
{"quiet", no_argument, NULL, 'q'},
51+
{"timeout", required_argument, NULL, 't'},
4752
{"username", required_argument, NULL, 'U'},
4853
{NULL, 0, NULL, 0}
4954
};
5055

5156
progname = get_progname(argv[0]);
57+
set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pgscripts"));
5258
handle_help_version_opts(argc, argv, progname, help);
5359

54-
while ((c = getopt_long(argc, argv, "d:h:p:qU:V", long_options, &optindex)) != -1)
60+
while ((c = getopt_long(argc, argv, "d:h:p:qt:U:V", long_options, &optindex)) != -1)
5561
{
5662
switch (c)
5763
{
@@ -67,10 +73,14 @@ main(int argc, char **argv)
6773
case 'q':
6874
quiet = true;
6975
break;
76+
case 't':
77+
connect_timeout = pg_strdup(optarg);
78+
break;
7079
case 'U':
7180
pguser = pg_strdup(optarg);
7281
break;
7382
default:
83+
fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
7484
/*
7585
* We need to make sure we don't return 1 here because someone
7686
* checking the return code might infer unintended meaning
@@ -92,12 +102,31 @@ main(int argc, char **argv)
92102
}
93103

94104
/*
95-
* Get the default options so we can display them in our output
105+
* Set connection options
96106
*/
97107

108+
keywords[0] = "connect_timeout";
109+
values[0] = connect_timeout;
110+
keywords[1] = "fallback_application_name";
111+
values[1] = progname;
112+
if (pguser)
113+
{
114+
keywords[opt_index] = "user";
115+
values[opt_index] = pguser;
116+
opt_index++;
117+
}
118+
if (pgdbname)
119+
{
120+
keywords[opt_index] = "dbname";
121+
values[opt_index] = pgdbname;
122+
opt_index++;
123+
}
124+
125+
/*
126+
* Get the default host and port so we can display them in our output
127+
*/
98128
connect_options = PQconndefaults();
99129
conn_opt_ptr = connect_options;
100-
101130
while (conn_opt_ptr->keyword)
102131
{
103132
if (strncmp(conn_opt_ptr->keyword, "host", 5) == 0)
@@ -124,34 +153,9 @@ main(int argc, char **argv)
124153
else if (conn_opt_ptr->val)
125154
pgport = conn_opt_ptr->val;
126155
}
127-
else if (strncmp(conn_opt_ptr->keyword, "user", 5) == 0)
128-
{
129-
if (pguser)
130-
{
131-
keywords[opt_index] = conn_opt_ptr->keyword;
132-
values[opt_index] = pguser;
133-
opt_index++;
134-
}
135-
else if (conn_opt_ptr->val)
136-
pguser = conn_opt_ptr->val;
137-
}
138-
else if (strncmp(conn_opt_ptr->keyword, "dbname", 7) == 0)
139-
{
140-
if (pgdbname)
141-
{
142-
keywords[opt_index] = conn_opt_ptr->keyword;
143-
values[opt_index] = pgdbname;
144-
opt_index++;
145-
}
146-
else if (conn_opt_ptr->val)
147-
pgdbname = conn_opt_ptr->val;
148-
}
149156
conn_opt_ptr++;
150157
}
151158

152-
keywords[opt_index] = NULL;
153-
values[opt_index] = NULL;
154-
155159
rv = PQpingParams(keywords, values, 1);
156160

157161
if (!quiet)
@@ -198,5 +202,7 @@ help(const char *progname)
198202
printf(_("\nConnection options:\n"));
199203
printf(_(" -h, --host=HOSTNAME database server host or socket directory\n"));
200204
printf(_(" -p, --port=PORT database server port\n"));
205+
printf(_(" -t, --timeout=SECS seconds to wait when attempting connection, 0 disables (default: %s)\n"), DEFAULT_CONNECT_TIMEOUT);
201206
printf(_(" -U, --username=USERNAME database username\n"));
207+
printf(_("\nReport bugs to <pgsql-bugs@postgresql.org>.\n"));
202208
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy