Skip to content

Commit 84bee96

Browse files
committed
Improve version reporting in pgbench.
Commit 547f04e caused pgbench to start printing its version number, which seems like a fine idea, but it needs a bit more work: * Print the server version number too, when different. * Print the PG_VERSION string, not some reconstructed approximation. This patch copies psql's well-tested code for the same purpose. Discussion: https://postgr.es/m/1226654.1624036821@sss.pgh.pa.us
1 parent 7c337b6 commit 84bee96

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

src/bin/pgbench/pgbench.c

+35-1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
#include "common/username.h"
6464
#include "fe_utils/cancel.h"
6565
#include "fe_utils/conditional.h"
66+
#include "fe_utils/string_utils.h"
6667
#include "getopt_long.h"
6768
#include "libpq-fe.h"
6869
#include "pgbench.h"
@@ -5493,6 +5494,37 @@ printSimpleStats(const char *prefix, SimpleStats *ss)
54935494
}
54945495
}
54955496

5497+
/* print version banner */
5498+
static void
5499+
printVersion(PGconn *con)
5500+
{
5501+
int server_ver = PQserverVersion(con);
5502+
int client_ver = PG_VERSION_NUM;
5503+
5504+
if (server_ver != client_ver)
5505+
{
5506+
const char *server_version;
5507+
char sverbuf[32];
5508+
5509+
/* Try to get full text form, might include "devel" etc */
5510+
server_version = PQparameterStatus(con, "server_version");
5511+
/* Otherwise fall back on server_ver */
5512+
if (!server_version)
5513+
{
5514+
formatPGVersionNumber(server_ver, true,
5515+
sverbuf, sizeof(sverbuf));
5516+
server_version = sverbuf;
5517+
}
5518+
5519+
printf(_("%s (%s, server %s)\n"),
5520+
"pgbench", PG_VERSION, server_version);
5521+
}
5522+
/* For version match, only print pgbench version */
5523+
else
5524+
printf("%s (%s)\n", "pgbench", PG_VERSION);
5525+
fflush(stdout);
5526+
}
5527+
54965528
/* print out results */
54975529
static void
54985530
printResults(StatsData *total,
@@ -5506,7 +5538,6 @@ printResults(StatsData *total,
55065538
double bench_duration = PG_TIME_GET_DOUBLE(total_duration);
55075539
double tps = ntx / bench_duration;
55085540

5509-
printf("pgbench (PostgreSQL) %d.%d\n", PG_VERSION_NUM / 10000, PG_VERSION_NUM % 100);
55105541
/* Report test parameters. */
55115542
printf("transaction type: %s\n",
55125543
num_scripts == 1 ? sql_script[0].desc : "multiple scripts");
@@ -6334,6 +6365,9 @@ main(int argc, char **argv)
63346365
if (con == NULL)
63356366
exit(1);
63366367

6368+
/* report pgbench and server versions */
6369+
printVersion(con);
6370+
63376371
pg_log_debug("pghost: %s pgport: %s nclients: %d %s: %d dbName: %s",
63386372
PQhost(con), PQport(con), nclients,
63396373
duration <= 0 ? "nxacts" : "duration",

src/bin/pgbench/t/001_pgbench_with_server.pl

+1-1
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ sub pgbench
100100
'no such database');
101101

102102
pgbench(
103-
'-S -t 1', 1, [qr{^$}],
103+
'-S -t 1', 1, [],
104104
[qr{Perhaps you need to do initialization}],
105105
'run without init');
106106

0 commit comments

Comments
 (0)