Adjust pgbench option for debug mode.

Many other utilities use -d to specify the database to use, but
pgbench uses it to enable debug mode.  This is causing some users
to accidentally enable it.  This commit changes -d to accept the
database name and introduces --dbname.  Debug mode can still be
enabled with --debug.  This is a backward-incompatible change, but
it has been judged to be worth the trade-off, i.e., some scripts
that use pgbench will need to be updated.

Author: Greg Sabino Mullane
Reviewed-by: Tomas Vondra, Euler Taveira, Alvaro Herrera, David Christensen
Discussion: https://postgr.es/m/CAKAnmmLjAzwVtb%3DVEaeuCtnmOLpzkJ1uJ_XiQ362YdD9B72HSg%40mail.gmail.com
This commit is contained in:
Nathan Bossart 2024-03-25 11:08:53 -05:00
parent 374c7a2290
commit 3ff01b2b6e
4 changed files with 24 additions and 16 deletions

View File

@ -162,7 +162,8 @@ pgbench <optional> <replaceable>options</replaceable> </optional> <replaceable>d
<variablelist> <variablelist>
<varlistentry id="pgbench-option-dbname"> <varlistentry id="pgbench-option-dbname">
<term><replaceable class="parameter">dbname</replaceable></term> <term><option><optional>-d</optional> <replaceable class="parameter">dbname</replaceable></option></term>
<term><option><optional>--dbname=</optional><replaceable class="parameter">dbname</replaceable></option></term>
<listitem> <listitem>
<para> <para>
Specifies the name of the database to test in. If this is Specifies the name of the database to test in. If this is
@ -463,7 +464,6 @@ pgbench <optional> <replaceable>options</replaceable> </optional> <replaceable>d
</varlistentry> </varlistentry>
<varlistentry id="pgbench-option-debug"> <varlistentry id="pgbench-option-debug">
<term><option>-d</option></term>
<term><option>--debug</option></term> <term><option>--debug</option></term>
<listitem> <listitem>
<para> <para>

View File

@ -933,7 +933,8 @@ usage(void)
" --show-script=NAME show builtin script code, then exit\n" " --show-script=NAME show builtin script code, then exit\n"
" --verbose-errors print messages of all errors\n" " --verbose-errors print messages of all errors\n"
"\nCommon options:\n" "\nCommon options:\n"
" -d, --debug print debugging output\n" " --debug print debugging output\n"
" -d, --dbname=DBNAME database name to connect to\n"
" -h, --host=HOSTNAME database server host or socket directory\n" " -h, --host=HOSTNAME database server host or socket directory\n"
" -p, --port=PORT database server port number\n" " -p, --port=PORT database server port number\n"
" -U, --username=USERNAME connect as specified database user\n" " -U, --username=USERNAME connect as specified database user\n"
@ -6620,7 +6621,7 @@ main(int argc, char **argv)
{"builtin", required_argument, NULL, 'b'}, {"builtin", required_argument, NULL, 'b'},
{"client", required_argument, NULL, 'c'}, {"client", required_argument, NULL, 'c'},
{"connect", no_argument, NULL, 'C'}, {"connect", no_argument, NULL, 'C'},
{"debug", no_argument, NULL, 'd'}, {"dbname", required_argument, NULL, 'd'},
{"define", required_argument, NULL, 'D'}, {"define", required_argument, NULL, 'D'},
{"file", required_argument, NULL, 'f'}, {"file", required_argument, NULL, 'f'},
{"fillfactor", required_argument, NULL, 'F'}, {"fillfactor", required_argument, NULL, 'F'},
@ -6661,6 +6662,7 @@ main(int argc, char **argv)
{"max-tries", required_argument, NULL, 14}, {"max-tries", required_argument, NULL, 14},
{"verbose-errors", no_argument, NULL, 15}, {"verbose-errors", no_argument, NULL, 15},
{"exit-on-abort", no_argument, NULL, 16}, {"exit-on-abort", no_argument, NULL, 16},
{"debug", no_argument, NULL, 17},
{NULL, 0, NULL, 0} {NULL, 0, NULL, 0}
}; };
@ -6732,7 +6734,7 @@ main(int argc, char **argv)
if (!set_random_seed(getenv("PGBENCH_RANDOM_SEED"))) if (!set_random_seed(getenv("PGBENCH_RANDOM_SEED")))
pg_fatal("error while setting random seed from PGBENCH_RANDOM_SEED environment variable"); pg_fatal("error while setting random seed from PGBENCH_RANDOM_SEED environment variable");
while ((c = getopt_long(argc, argv, "b:c:CdD:f:F:h:iI:j:lL:M:nNp:P:qrR:s:St:T:U:v", long_options, &optindex)) != -1) while ((c = getopt_long(argc, argv, "b:c:Cd:D:f:F:h:iI:j:lL:M:nNp:P:qrR:s:St:T:U:v", long_options, &optindex)) != -1)
{ {
char *script; char *script;
@ -6773,7 +6775,7 @@ main(int argc, char **argv)
is_connect = true; is_connect = true;
break; break;
case 'd': case 'd':
pg_logging_increase_verbosity(); dbName = pg_strdup(optarg);
break; break;
case 'D': case 'D':
{ {
@ -6998,6 +7000,9 @@ main(int argc, char **argv)
benchmarking_option_set = true; benchmarking_option_set = true;
exit_on_abort = true; exit_on_abort = true;
break; break;
case 17: /* debug */
pg_logging_increase_verbosity();
break;
default: default:
/* getopt_long already emitted a complaint */ /* getopt_long already emitted a complaint */
pg_log_error_hint("Try \"%s --help\" for more information.", progname); pg_log_error_hint("Try \"%s --help\" for more information.", progname);
@ -7048,16 +7053,19 @@ main(int argc, char **argv)
*/ */
throttle_delay *= nthreads; throttle_delay *= nthreads;
if (argc > optind) if (dbName == NULL)
dbName = argv[optind++];
else
{ {
if ((env = getenv("PGDATABASE")) != NULL && *env != '\0') if (argc > optind)
dbName = env; dbName = argv[optind++];
else if ((env = getenv("PGUSER")) != NULL && *env != '\0')
dbName = env;
else else
dbName = get_user_name_or_exit(progname); {
if ((env = getenv("PGDATABASE")) != NULL && *env != '\0')
dbName = env;
else if ((env = getenv("PGUSER")) != NULL && *env != '\0')
dbName = env;
else
dbName = get_user_name_or_exit(progname);
}
} }
if (optind < argc) if (optind < argc)

View File

@ -1352,7 +1352,7 @@ my $err_pattern =
. "\\1"; . "\\1";
$node->pgbench( $node->pgbench(
"-n -c 2 -t 1 -d --verbose-errors --max-tries 2", "-n -c 2 -t 1 --debug --verbose-errors --max-tries 2",
0, 0,
[ [
qr{processed: 2/2\b}, qr{processed: 2/2\b},

View File

@ -66,7 +66,7 @@ my @options = (
# name, options, stderr checks # name, options, stderr checks
[ [
'bad option', 'bad option',
'-h home -p 5432 -U calvin -d --bad-option', '-h home -p 5432 -U calvin ---debug --bad-option',
[qr{--help.*more information}] [qr{--help.*more information}]
], ],
[ [