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
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index bcd8eb3538..a853bce096 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -1238,6 +1238,8 @@ exec_command_ef_ev(PsqlScanState scan_state, bool active_branch,
 			else
 				status = PSQL_CMD_NEWEDIT;
 		}
+		else
+			resetPQExpBuffer(query_buf);
 
 		free(obj_desc);
 	}

Reply via email to