Bug fix for psql's meta-command \ev

Ryoga Yoshida <bt23yoshidar@oss.nttdata.com>

From: Ryoga Yoshida <bt23yoshidar@oss.nttdata.com>
To: pgsql-hackers@lists.postgresql.org
Date: 2023-09-15T02:37:46Z
Lists: pgsql-hackers

Attachments

Hi,

When a table name is specified as the first argument of \ev 
meta-command, it reports the error message, the prompt string becomes 
"-#" and then the following valid query fails because the psql's query 
buffer contains the garbage string generated by failure of \ev. Please 
see the following example.
=# \ev t
"public.t" is not a view

-# SELECT * FROM t;
ERROR:  syntax error at or near "public" at character 1
STATEMENT:  public.t AS

	SELECT * FROM t;
I think this is a bug in psql's \ev meta-command. Even when \ev fails, 
it should not leave the garbage string in psql's query buffer and the 
following query should be completed successfully.
This problem can be resolved by resetting the query buffer on error. You 
can see the attached source code. After that, it will result in output 
like the following:
=# \ev t
"public.t" is not a view
=# SELECT * FROM t;
  i
---
  1
  2
(2 rows)

Ryoga Yoshida

Commits

  1. psql: Reset query buffer of \e, \ef and \ev on error