On 11-07-2018 22:34, Fabien COELHO wrote:
can we try something like this?

PGBENCH_ERROR_START(DEBUG_FAIL)
{
        PGBENCH_ERROR("client %d repeats the failed transaction (try %d",

Argh, no? I was thinking of something much more trivial:

   pgbench_error(DEBUG, "message format %d %s...", 12, "hello world");

If you really need some complex dynamic buffer, and I would prefer
that you avoid that, then the fallback is:

   if (level >= DEBUG)
   {
      initPQstuff(&msg);
      ...
      pgbench_error(DEBUG, "fixed message... %s\n", msg);
      freePQstuff(&msg);
   }

The point is to avoid building the message with dynamic allocation and so
if in the end it is not used.

Ok! About avoidance - I'm afraid there's one more piece of debugging code with the same problem:

else if (command->type == META_COMMAND)
{
...
        initPQExpBuffer(&errmsg_buf);
        printfPQExpBuffer(&errmsg_buf, "client %d executing \\%s",
                                          st->id, argv[0]);
        for (i = 1; i < argc; i++)
                appendPQExpBuffer(&errmsg_buf, " %s", argv[i]);
        appendPQExpBufferChar(&errmsg_buf, '\n');
        ereport(ELEVEL_DEBUG, (errmsg("%s", errmsg_buf.data)));
        termPQExpBuffer(&errmsg_buf);

--
Marina Polyakova
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company

Reply via email to