While playing with pgbench, I found multiple "-M query_mode" can be set more than once. For example,
$ pgbench -p 11002 -M extended -S -M prepared test starting vacuum...end. transaction type: <builtin: select only> scaling factor: 1 query mode: prepared number of clients: 1 number of threads: 1 number of transactions per client: 10 number of transactions actually processed: 10/10 latency average = 0.490 ms tps = 2040.372858 (including connections establishing) tps = 3920.541599 (excluding connections establishing) In this case the last "-M prepared" was chosen as the query mode. This is sloppy because we cannot actually choose different -M at the same time. Attached is a patch to detect such an error. 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/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index 81bc6d8a6e..d69478b8dd 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -464,6 +464,7 @@ typedef enum QueryMode static QueryMode querymode = QUERY_SIMPLE; static const char *QUERYMODE[] = {"simple", "extended", "prepared"}; +bool query_mode_already_set = false; typedef struct { @@ -5149,6 +5150,12 @@ main(int argc, char **argv) } break; case 'M': + if (query_mode_already_set) + { + fprintf(stderr, "query mode (-M) already set\n"); + exit(1); + } + query_mode_already_set = true; benchmarking_option_set = true; for (querymode = 0; querymode < NUM_QUERYMODE; querymode++) if (strcmp(optarg, QUERYMODE[querymode]) == 0)