Hi,
It is pretty annoying that pgbench does not check parameter which
should not be used with -i. I often type like:
pgbench -c 10 -T 300 -S -i test
and accidentally initialize pgbench database. This is pretty
uncomfortable if the database is huge since initializing huge database
takes long time. Why don't we check the case? Included is the patch to
enhance the behavior of pgbench in this regard IMO. Here is a sample
session after patching:
$ ./pgbench -c 10 -T 300 -S -i test
some parameters cannot be used in initialize mode
Best regards,
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese:http://www.sraoss.co.jp
diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c
index c0e5e24..d7a3f57 100644
--- a/contrib/pgbench/pgbench.c
+++ b/contrib/pgbench/pgbench.c
@@ -2520,6 +2520,8 @@ main(int argc, char **argv)
char *filename = NULL;
bool scale_given = false;
+ bool is_non_init_param_set = false;
+
CState *state; /* status of clients */
TState *threads; /* array of thread */
@@ -2599,12 +2601,14 @@ main(int argc, char **argv)
break;
case 'S':
ttype = 1;
+ is_non_init_param_set = true;
break;
case 'N':
ttype = 2;
+ is_non_init_param_set = true;
break;
case 'c':
- nclients = atoi(optarg);
+ is_non_init_param_set = true;
if (nclients <= 0 || nclients > MAXCLIENTS)
{
fprintf(stderr, "invalid number of clients: %d\n", nclients);
@@ -2629,6 +2633,7 @@ main(int argc, char **argv)
#endif /* HAVE_GETRLIMIT */
break;
case 'j': /* jobs */
+ is_non_init_param_set = true;
nthreads = atoi(optarg);
if (nthreads <= 0)
{
@@ -2637,9 +2642,11 @@ main(int argc, char **argv)
}
break;
case 'C':
+ is_non_init_param_set = true;
is_connect = true;
break;
case 'r':
+ is_non_init_param_set = true;
is_latencies = true;
break;
case 's':
@@ -2652,6 +2659,7 @@ main(int argc, char **argv)
}
break;
case 't':
+ is_non_init_param_set = true;
if (duration > 0)
{
fprintf(stderr, "specify either a number of transactions (-t) or a duration (-T), not both.\n");
@@ -2665,6 +2673,7 @@ main(int argc, char **argv)
}
break;
case 'T':
+ is_non_init_param_set = true;
if (nxacts > 0)
{
fprintf(stderr, "specify either a number of transactions (-t) or a duration (-T), not both.\n");
@@ -2681,12 +2690,14 @@ main(int argc, char **argv)
login = pg_strdup(optarg);
break;
case 'l':
+ is_non_init_param_set = true;
use_log = true;
break;
case 'q':
use_quiet = true;
break;
case 'f':
+ is_non_init_param_set = true;
ttype = 3;
filename = pg_strdup(optarg);
if (process_file(filename) == false || *sql_files[num_files - 1] == NULL)
@@ -2696,6 +2707,8 @@ main(int argc, char **argv)
{
char *p;
+ is_non_init_param_set = true;
+
if ((p = strchr(optarg, '=')) == NULL || p == optarg || *(p + 1) == '\0')
{
fprintf(stderr, "invalid variable definition: %s\n", optarg);
@@ -2716,6 +2729,7 @@ main(int argc, char **argv)
}
break;
case 'M':
+ is_non_init_param_set = true;
if (num_files > 0)
{
fprintf(stderr, "query mode (-M) should be specifiled before transaction scripts (-f)\n");
@@ -2731,6 +2745,7 @@ main(int argc, char **argv)
}
break;
case 'P':
+ is_non_init_param_set = true;
progress = atoi(optarg);
if (progress <= 0)
{
@@ -2745,6 +2760,8 @@ main(int argc, char **argv)
/* get a double from the beginning of option value */
double throttle_value = atof(optarg);
+ is_non_init_param_set = true;
+
if (throttle_value <= 0.0)
{
fprintf(stderr, "invalid rate limit: %s\n", optarg);
@@ -2764,6 +2781,7 @@ main(int argc, char **argv)
index_tablespace = pg_strdup(optarg);
break;
case 4:
+ is_non_init_param_set = true;
sample_rate = atof(optarg);
if (sample_rate <= 0.0 || sample_rate > 1.0)
{
@@ -2776,6 +2794,7 @@ main(int argc, char **argv)
fprintf(stderr, "--aggregate-interval is not currently supported on Windows");
exit(1);
#else
+ is_non_init_param_set = true;
agg_interval = atoi(optarg);
if (agg_interval <= 0)
{
@@ -2808,6 +2827,12 @@ main(int argc, char **argv)
if (is_init_mode)
{
+ if (is_non_init_param_set)
+ {
+ fprintf(stderr, "some parameters cannot be used in initialize mode\n");
+ exit(1);
+ }
+
init(is_no_vacuum);
exit(0);
}
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers