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 (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers