pá 20. 8. 2021 v 17:50 odesílatel Tom Lane <t...@sss.pgh.pa.us> napsal:

> In commit 2f48ede08 I copied some error-message wording that had
> existed in exec_run_select() since 2003.  I'm now dissatified
> with that, after realizing that it can produce output like this:
>
> ERROR:  query "WITH a AS (
>     SELECT
>       regexp_split_to_table(info_out, '\n') AS info
>     FROM
>       public.results
>     WHERE
>       public.results.jid = id
> )
>   SELECT
>     * INTO tabular_info
>   FROM
>     a RETURN" is not a SELECT
> CONTEXT:  PL/pgSQL function get_info(text) line 3 at RETURN QUERY
>
> There are a couple of things wrong with this:
>
> 1. The complaint is factually inaccurate, since the query obviously
> *is* a SELECT.  It's the INTO part that's the problem, but good luck
> guessing that from the error text.  (See [1] for motivation.)
>
> 2. It's fairly unreadable when the query is a long multi-line one,
> as it does a great job of burying the lede.  This also violates
> our message style guideline that says primary error messages should
> be one-liners.
>
> The way to fix #1 is to provide a special case for SELECT INTO.
> In the attached I propose to fix #2 by moving the query text into
> an errcontext line, thus producing something like
>
> ERROR:  query is SELECT INTO, but it should be plain SELECT
> CONTEXT:  query: WITH a AS (
>     SELECT
>       regexp_split_to_table(info_out, '\n') AS info
>     FROM
>       public.results
>     WHERE
>       public.results.jid = id
> )
>   SELECT
>     * INTO tabular_info
>   FROM
>     a RETURN
> PL/pgSQL function get_info(text) line 3 at RETURN QUERY
>
> A case could also be made for just dropping the query text entirely,
> but I'm inclined to think that's not such a great idea.  Certainly
> we ought to show the text in case of RETURN QUERY EXECUTE, where it
> won't be embedded in the function text.
>
> Looking around, I noted that exec_eval_expr() also has the bad
> habit of quoting the expression text right in the primary message,
> so the attached fixes that too.  That case is slightly less bad
> since expressions are more likely to be short, but they surely
> aren't all short.
>
> Thoughts?  Should I back-patch this into v14 where 2f48ede08
> came in, or just do it in HEAD?
>

It can be fixed in 14. This is a low risk patch.

Regards

Pavel


>                         regards, tom lane
>
> [1] https://www.postgresql.org/message-id/y65a6lco0z4.fsf%40mun.ca
>
>

Reply via email to