Thanks for your analysis.

Regards

El mié., 24 jun. 2020 a las 17:17, Tom Lane (<t...@sss.pgh.pa.us>) escribió:

> I wrote:
> > David Rowley <dgrowle...@gmail.com> writes:
> >> I don't often do much with pgbench and variables, but there are a few
> >> things that surprise me here.
> >> 1) That pgbench replaces variables within single quotes, and;
> >> 2) that we still think it's a variable name when it starts with a
> digit, and;
> >> 3) We replace variables that are undefined.
>
> > Also (4) this only happens when in non-simple query mode --- the
> > example works fine without "-M prepared".
>
> After looking around in the code, it seems like the core of the issue
> is that pgbench.c's parseQuery() doesn't check whether a possible
> variable name is actually defined, unlike assignVariables() which is
> what does the same job in simple query mode.  So that explains the
> behavioral difference.
>
> The reason for doing that probably was that parseQuery() is run when
> the input file is read, so that relevant variables might not be set
> yet.  We could fix that by postponing the work to be done at first
> execution of the query, as is already the case for PQprepare'ing the
> query.
>
> Also, after further thought I realize that (1) absolutely is a bug
> in the non-simple query modes, whatever you think about it in simple
> mode.  The non-simple modes are trying to pass the variable values
> as extended-query-protocol parameters, and the backend is not going
> to recognize $n inside a literal as being a parameter.
>
> If we fixed (1) and (3) I think there wouldn't be any great need
> to tighten up (2).
>
>                         regards, tom lane
>

Reply via email to