Re: BUG #18134: ROW_COUNT do not set to 0 when psql's \gset command get no rows returned

Japin Li <japinli@hotmail.com>

From: Japin Li <japinli@hotmail.com>
To: amutu@amutu.com, pgsql-bugs@lists.postgresql.org
Date: 2023-09-27T10:00:58Z
Lists: pgsql-bugs

Attachments

On Tue, 26 Sep 2023 at 09:26, PG Bug reporting form <noreply@postgresql.org> wrote:
> The following bug has been logged on the website:
>
> Bug reference:      18134
> Logged by:          amutu
> Email address:      amutu@amutu.com
> PostgreSQL version: 15.4
> Operating system:   FreeBSD 13.2-RELEASE amd64
> Description:        
>
> reproduce steps:
>
> $psql postgres
> psql (15.4)
> Type "help" for help.
>
> postgres=# select * from cmdq  where status= 'new' \gset
> no rows returned for \gset
> postgres=# \echo :ROW_COUNT
> :ROW_COUNT
> postgres=# select * from cmdq;
>    cmd   |  src_ip   | worker | status |              ts               | id
>
> ---------+-----------+--------+--------+-------------------------------+----
>  ls /tmp | 127.0.0.1 |        | done   | 2023-09-23 14:39:59.047309+08 | 
> 1
> (1 row)
>
> postgres=# \echo :ROW_COUNT
> 1
> postgres=# select * from cmdq  where status= 'new' \gset
> no rows returned for \gset
> postgres=# \echo :ROW_COUNT
> 1
> ------------------------------------------------
> from the psql doc:
> ROW_COUNT
> The number of rows returned or affected by the last SQL query, !!!!or 0 if
> the query failed or did not report a row count.!!!!

It seems SaveResultVariables() was lost when executing failed. Attached fix it.

Commits

  1. psql: Set variables from query result on failure when printing tuples