Re: Documentation fix on pgbench \aset command - Mailing list pgsql-hackers

From Yugo Nagata
Subject Re: Documentation fix on pgbench \aset command
Date
Msg-id 20250627103643.d6e8b91de79c1a66d4c96810@sraoss.co.jp
Whole thread Raw
In response to Re: Documentation fix on pgbench \aset command  (Fujii Masao <masao.fujii@oss.nttdata.com>)
List pgsql-hackers
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>

Attachment

pgsql-hackers by date:

Previous
From: Michael Paquier
Date:
Subject: Re: pg_logical_slot_get_changes waits continously for a partial WAL record spanning across 2 pages
Next
From: jian he
Date:
Subject: Re: SQL:2023 JSON simplified accessor support