Add :client_id automatic variable for custom pgbench scripts.

This makes it easier to write custom scripts that have different logic for
each client.

Gurjeet Singh, with some changes by me.
This commit is contained in:
Heikki Linnakangas 2013-06-14 23:31:44 +03:00
parent 46e1434f3d
commit b23160889c
2 changed files with 41 additions and 1 deletions

View File

@ -2544,6 +2544,20 @@ main(int argc, char **argv)
}
}
/*
* Define a :client_id variable that is unique per connection. But don't
* override an explicit -D switch.
*/
if (getVariable(&state[0], "client_id") == NULL)
{
for (i = 0; i < nclients; i++)
{
snprintf(val, sizeof(val), "%d", i);
if (!putVariable(&state[i], "startup", "client_id", val))
exit(1);
}
}
if (!is_no_vacuum)
{
fprintf(stderr, "starting vacuum...");

View File

@ -600,13 +600,39 @@ pgbench <optional> <replaceable>options</> </optional> <replaceable>dbname</>
Variables can be set by the command-line <option>-D</> option,
explained above, or by the meta commands explained below.
In addition to any variables preset by <option>-D</> command-line options,
the variable <literal>scale</> is preset to the current scale factor.
there are a few variables that are preset automatically, listed in
<xref linkend="pgbench-automatic-variables">. A value specified for these
variables using <option>-D</> takes precedence over the automatic presets.
Once set, a variable's
value can be inserted into a SQL command by writing
<literal>:</><replaceable>variablename</>. When running more than
one client session, each session has its own set of variables.
</para>
<table id="pgbench-automatic-variables">
<title>Automatic variables</title>
<tgroup cols="2">
<thead>
<row>
<entry>Variable</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry> <literal>scale</literal> </entry>
<entry>current scale factor</entry>
</row>
<row>
<entry> <literal>client_id</literal> </entry>
<entry>unique number identifying the client session (starts from zero)</entry>
</row>
</tbody>
</tgroup>
</table>
<para>
Script file meta commands begin with a backslash (<literal>\</>).
Arguments to a meta command are separated by white space.