Re: BUG #8226: Inconsistent unnesting of arrays

Поиск
Список
Период
Сортировка
От Denis de Bernardy
Тема Re: BUG #8226: Inconsistent unnesting of arrays
Дата
Msg-id 336D0D5D-A04D-4E71-B78F-484017B74F81@yahoo.com
обсуждение исходный текст
Ответ на Re: BUG #8226: Inconsistent unnesting of arrays  (Greg Stark <stark@mit.edu>)
Ответы Re: BUG #8226: Inconsistent unnesting of arrays  (Pavel Stehule <pavel.stehule@gmail.com>)
Re: BUG #8226: Inconsistent unnesting of arrays  (hubert depesz lubaczewski <depesz@depesz.com>)
Re: BUG #8226: Inconsistent unnesting of arrays  (hubert depesz lubaczewski <depesz@depesz.com>)
Список pgsql-bugs
The actual query was something like:

select id, person, unnest(groups) as grp from people

=85 where groups is a crazy column containing an array that needed to be =
joined with another table. In this case, you cannot do your suggested =
solution, which would look like this:

select id, person, grp from people, unnest(groups) as grp

Admittedly, there are other ways to rewrite the above, but =97 if I may =
=97 that's entirely besides the point of the bug report. The Stack =
Overflow question got me curious about what occurred when two separate =
arrays are unnested.

Testing revealed the inconsistency, which I tend to view as a bug.

This statement works as expected, unnesting the first array, then cross =
joining the second accordingly:

>> select 1 as a, unnest('{2,3}'::int[]) as b, unnest('{4,5,6}'::int[])


This seems to only unnest one of the arrays, and match the element with =
the same subscript in the other array:

>> select 1 as a, unnest('{2,3}'::int[]) as b, unnest('{4,5}'::int[])


Methinks the behavior should be consistent. It should always do one =
(presumably like in the first statement) or the other (which leads to =
undefined behavior in the first statement).

Or it should raise some kind of warning, e.g. "you're using =
undocumented/unsupported/deprecated/broken syntactic sugar".

Denis


On Jun 12, 2013, at 12:05 PM, Greg Stark wrote:

> On Wed, Jun 12, 2013 at 9:58 AM,  <ddebernardy@yahoo.com> wrote:
>> denis=3D# select 1 as a, unnest('{2,3}'::int[]) as b, =
unnest('{4,5}'::int[])
>=20
> set returning functions in the target list of the select don't behave
> the way you're thinking. What you probably want to do is move the
> unnest() to the FROM clause:
>=20
> select 1 as a, b, c from unnest('{2,3}'::int[]) as b(b),
> unnest('{4,5}'::int[]) as c(c)
>=20
>=20
> --=20
> greg

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Greg Stark
Дата:
Сообщение: Re: BUG #8226: Inconsistent unnesting of arrays
Следующее
От: Pavel Stehule
Дата:
Сообщение: Re: BUG #8226: Inconsistent unnesting of arrays