Re: BUG #5644: Selecting ROW() in variable with 9.0 not compatible with 8.4
От | Robert Haas |
---|---|
Тема | Re: BUG #5644: Selecting ROW() in variable with 9.0 not compatible with 8.4 |
Дата | |
Msg-id | AANLkTikrSCcQUGQRDr7WBag5kg3W4vienPSg=aVwqM8J@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: BUG #5644: Selecting ROW() in variable with 9.0 not compatible with 8.4 (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: BUG #5644: Selecting ROW() in variable with 9.0 not compatible with 8.4
|
Список | pgsql-bugs |
On Wed, Sep 8, 2010 at 11:42 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Valentine Gogichashvili <valgog@gmail.com> writes: >> CREATE TYPE ta AS (a1 integer, a2 text); >> CREATE TYPE tb AS (b1 integer, b2 ta); > >> DECLARE >> =A0a ta; >> =A0b tb; >> BEGIN > >> =A0SELECT 1, 'a' INTO a; =A0 =A0 =A0-- ok > >> =A0SELECT ROW(10, 'a') INTO b.b2; -- ok in 8.4 but fails in 9.0 [ERROR: >> =A0invalid input syntax for integer: "(10,a)"] > >> =A0SELECT 100, 'a' INTO b.b2; =A0 -- ok in 9.0 but fails in 8.4 [ERROR: = =A0cannot >> assign non-composite value to a row variable] > > [ pokes around for a bit ... ] =A0This is a consequence of the plpgsql > lexer rewrite I did for 9.0. =A0In the previous code, "INTO b.b2" was > treated by the lexer as an assignment to a scalar variable, regardless > of the actual data type of b2. =A0Which means that the SELECT has to > produce a single column that gets assigned to b.b2, so your first case > works and your second doesn't. =A0The new code looks at the data type > of b2 rather than whether it's syntactically a field reference, so it > decides this is an assignment to a composite variable. =A0That results in > behavior similar to the "INTO a" case: the SELECT is supposed to produce > one column for each field of the composite variable. =A0Hence, second case > works and first doesn't. > > I am not sure how ugly a kluge would be needed to restore the previous > behavior. =A0I'm inclined to say that the new behavior is more > self-consistent and so we should call this a bug fix rather than a bug. If we know the types of everything, is it possible to make both cases work? --=20 Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise Postgres Company
В списке pgsql-bugs по дате отправления: