Re: [BUGS] Possible regression in 'UPDATE ... SET () = ' with just one single column/row value since v10
От | Tom Lane |
---|---|
Тема | Re: [BUGS] Possible regression in 'UPDATE ... SET ( |
Дата | |
Msg-id | 25202.1508858486@sss.pgh.pa.us обсуждение исходный текст |
Ответ на |
Re: [BUGS] Possible regression in 'UPDATE ... SET ( |
Ответы |
Re: [BUGS] Possible regression in 'UPDATE ... SET ( |
Список | pgsql-bugs |
"David G. Johnston" <david.g.johnston@gmail.com> writes: > On Tue, Oct 24, 2017 at 7:55 AM, YasonTR <yasontr@protonmail.com> wrote: >> I get your reference to the spec, but why is it working without ROW() when >> multiple columns are involved? For example: "UPDATE my_table SET (a, b) = >> (x, y)" works on v10 (afaik). > "The key word ROW is optional when there is more than one expression in > the list." Right. This was not one of the SQL committee's better syntax choices, in my book --- allowing ROW to be optional makes the single-column case a weird exception, since then and only then ROW is required to make it a row constructor and not just an expression with useless extra parens. The spec says that the source value for a parenthesized SET list is a <contextually typed row value expression>. Pre-v10, we handled this with a grammar hack that looked specifically for a parenthesized list of expressions, and as it happened it would accept a single parenthesized expression as well. Now it's expecting a normal row constructor, which can be one ofROW(one_expr)ROW(an_expr, another_expr [, ...])(an_expr, another_expr [, ...]) regards, tom lane -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs
В списке pgsql-bugs по дате отправления: