Re: BUG #18195: PL/pgSQL: invalid syntax allowed in SELECT INTO statement

From: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: paul(dot)kulakov(at)systematica(dot)ru, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #18195: PL/pgSQL: invalid syntax allowed in SELECT INTO statement
Date: 2023-11-14 15:52:36
Message-ID: CAFj8pRD3k_vFi9kGrA_SJc4bxLxT6k0=zu1tsg2BBrpHZ5SNJQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Hi

út 14. 11. 2023 v 16:31 odesílatel Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> napsal:

> PG Bug reporting form <noreply(at)postgresql(dot)org> writes:
> > 1. The following code is successfully executed although it has incorrect
> > syntax: there must be comma (,) between _n and _s in 'into' section.
>
> > select 1, 'string1', 'string2'
> > into _n _s;
>
> I believe this is being read the same as
>
> select 1, 'string1', 'string2' _s into _n;
>
> That is, the lack of a comma causes the INTO sub-clause to end,
> and then _s is taken as an AS-less column label. As the manual
> explains, for backwards-compatibility reasons we allow INTO to be
> embedded anywhere in the command, even though that leads to
> surprising-looking cases like this one.
>
> As for the question of why you don't get an error for the wrong
> number of INTO targets, again that's backwards compatibility.
> There's a "strict_multi_assignment" check you can turn on to make
> it complain about that [1].
>
> regards, tom lane
>
> [1]
> https://www.postgresql.org/docs/current/plpgsql-development-tips.html#PLPGSQL-EXTRA-CHECKS

The extension plpgsql_check https://github.com/okbob/plpgsql_check can
raise warnings for these cases too

Regards

Pavel

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2023-11-14 17:48:54 Re: BUG #18097: Immutable expression not allowed in generated at
Previous Message Tom Lane 2023-11-14 15:31:01 Re: BUG #18195: PL/pgSQL: invalid syntax allowed in SELECT INTO statement