pgbench -M option can be specified more than once
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
Attachments:
pgbench-query-mode.difftext/x-patch; charset=us-asciiDownload
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)
Tatsuo Ishii <ishii@sraoss.co.jp> writes:
While playing with pgbench, I found multiple "-M query_mode" can be
set more than once. For example,
I think that's true of just about every option in all of our programs.
Why is this one instance so much worse than others that it deserves
to be handled differently?
regards, tom lane
Tatsuo Ishii <ishii@sraoss.co.jp> writes:
While playing with pgbench, I found multiple "-M query_mode" can be
set more than once. For example,I think that's true of just about every option in all of our programs.
Why is this one instance so much worse than others that it deserves
to be handled differently?
One of my colleagues actually believed that if both "-M extended" and
"-M prepared" were specified, pgbench runs in mixture of those
modes. So I felt avoiding such misunderstanding is more important.
Best regards,
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese:http://www.sraoss.co.jp
In many cases, it is handy to be able to specify an option in an alias, but
still be able to override on the actual command line.
I can't say whether that is useful with this specific option, but it seems
the same debate could be had about almost any option. I'm pretty sure the
existing behaviour is consistent with other options, with the exception of
a few (e.g. pg_dump --table), which are explicitly documented as being
cumulative.
On Fri, 2 Nov 2018 at 21:12, Tatsuo Ishii <ishii@sraoss.co.jp> wrote:
Show quoted text
Tatsuo Ishii <ishii@sraoss.co.jp> writes:
While playing with pgbench, I found multiple "-M query_mode" can be
set more than once. For example,I think that's true of just about every option in all of our programs.
Why is this one instance so much worse than others that it deserves
to be handled differently?One of my colleagues actually believed that if both "-M extended" and
"-M prepared" were specified, pgbench runs in mixture of those
modes. So I felt avoiding such misunderstanding is more important.Best regards,
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese:http://www.sraoss.co.jp
Hi,
On 2018-11-03 10:12:14 +0900, Tatsuo Ishii wrote:
Tatsuo Ishii <ishii@sraoss.co.jp> writes:
While playing with pgbench, I found multiple "-M query_mode" can be
set more than once. For example,I think that's true of just about every option in all of our programs.
Why is this one instance so much worse than others that it deserves
to be handled differently?One of my colleagues actually believed that if both "-M extended" and
"-M prepared" were specified, pgbench runs in mixture of those
modes. So I felt avoiding such misunderstanding is more important.
I regularly specify options multiple times, and I'd hate for that to not
work anymore. It's really useful to set defaults for scripts that then
can be overwritten by the caller by passing on "$@" (i.e. all script
arguments).
Greetings,
Andres Freund
Andres Freund <andres@anarazel.de> writes:
On 2018-11-03 10:12:14 +0900, Tatsuo Ishii wrote:
One of my colleagues actually believed that if both "-M extended" and
"-M prepared" were specified, pgbench runs in mixture of those
modes. So I felt avoiding such misunderstanding is more important.
I regularly specify options multiple times, and I'd hate for that to not
work anymore. It's really useful to set defaults for scripts that then
can be overwritten by the caller by passing on "$@" (i.e. all script
arguments).
Yeah, there's an ancient tradition that "last switch wins" when receiving
conflicting command-line options. I think we should tread very carefully
in breaking that.
regards, tom lane
Hello Tatsuo-san,
While playing with pgbench, I found multiple "-M query_mode" can be
set more than once.
As already said by others, the "last one win" is somehow a useful feature,
so I'd prefer avoiding erroring out on this one.
This could leave:
(1) improving pgbench doc by spelling out the last one win behavior, but
this is rather standard ;
(2) only warning when this accurs, but that would become noisy for
legitimate uses ;
(3) doing nothing about it.
--
Fabien.
Andres Freund <andres@anarazel.de> writes:
On 2018-11-03 10:12:14 +0900, Tatsuo Ishii wrote:
One of my colleagues actually believed that if both "-M extended" and
"-M prepared" were specified, pgbench runs in mixture of those
modes. So I felt avoiding such misunderstanding is more important.I regularly specify options multiple times, and I'd hate for that to not
work anymore. It's really useful to set defaults for scripts that then
can be overwritten by the caller by passing on "$@" (i.e. all script
arguments).Yeah, there's an ancient tradition that "last switch wins" when receiving
conflicting command-line options. I think we should tread very carefully
in breaking that.
Yes, I think that is a fair argument. Proposal withdrawn.
Best regards,
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese:http://www.sraoss.co.jp