On Fri, 27 Jun 2025 01:45:16 +0900
Fujii Masao <masao.fujii@oss.nttdata.com> wrote:
>
>
> On 2025/06/27 1:31, Yugo Nagata wrote:
> > On Fri, 27 Jun 2025 01:05:47 +0900
> > Fujii Masao <masao.fujii@oss.nttdata.com> wrote:
> >
> >>
> >>
> >> On 2025/06/26 18:01, Yugo Nagata wrote:
> >>> Hi,
> >>>
> >>> The current documentation of pgbench’s \aset command states:
> >>>
> >>> “If a query returns no row, no assignment is made and the variable
> >>> can be tested for existence to detect this.”
> >>>
> >>> However, this is inaccurate, since variable existence check (like \if :{?var})
> >>> is not yet supported, although such a feature was proposed in [1] and discussed
> >>> again in [2], where \aset itself was introduced.
> >>
> >> Right.
> >>
> >>
> >>> Therefore, I’ve attached a patch to remove this part from the documentation.
> >>
> >> Or would it be worth documenting an alternative way to detect when no rows are
> >> returned? For example:
> >>
> >> If a query returns no rows, no variables are assigned. You can detect
> >> this by setting an initial value to the variable before running the query
> >> and checking whether it changes.
> >
> > That's what I thought as well, but I didn’t do it because we can’t distinguish it
> > from the case where the query returns the same value as the initial one.
>
> Could we use a value that the query is guaranteed not to return as the initial value?
> For example, in SELECT id AS myid FROM test \aset, if the id column is of type integer,
> we could initialize myid to FALSE.
This will work if we assume that the query never returns the initial value.
I've attached a updated patch that fix the documentation as below:
If a query returns no rows, no assignment is made. You can detect
this by initializing the variable beforehand with a value that the query is
assumed never to return, and then checking whether it changes.
Regards,
Yugo Nagata
--
Yugo Nagata <nagata@sraoss.co.jp>