Re: Recent 11.16 release change

Поиск
Список
Период
Сортировка
От Daniel Brinzila
Тема Re: Recent 11.16 release change
Дата
Msg-id CAHVn1A=bxkJs5iqYHKo8hK7Um0Eucx-xY+ckaYXuHZPrp0pXGw@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Recent 11.16 release change  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general
Tom,

Thanks very much for the clarification, i was just going over the regression tests and now makes sense. 

However, is this the only function (row_to_json) or are there more of them affected by this change?

Regards,
Daniel



On Tue, Jun 14, 2022 at 5:23 PM Tom Lane <tgl_at_sss_pgh_pa_us_5s592v294c5771_de0d8337@icloud.com> wrote:
Daniel Brinzila <briuz001@umn.edu> writes:
> I am a bit confused as to the following change:
>    Stop using query-provided column aliases for the columns of whole-row
>    variables that refer to plain tables (Tom Lane)

> Could someone please give an example of this scenario, one that works in
> 11.15 and another for 11.16 after the recent change.

Here's the regression test example that changed behavior in that commit:

regression=# select row_to_json(i) from int8_tbl i(x,y);
                  row_to_json                   
------------------------------------------------
 {"q1":123,"q2":456}
 {"q1":123,"q2":4567890123456789}
 {"q1":4567890123456789,"q2":123}
 {"q1":4567890123456789,"q2":4567890123456789}
 {"q1":4567890123456789,"q2":-4567890123456789}
(5 rows)

The fields of the JSON output used to be labeled "x" and "y", after
the column aliases of the FROM item.  But now that doesn't work and
you get the table's original column names (which happen to be "q1"
and "q2" in this test case).

The workaround proposed in the release note is to do this if you
need to relabel the columns of the whole-row variable "i":

regression=# select row_to_json(i) from (select * from int8_tbl) i(x,y);
                 row_to_json                 
----------------------------------------------
 {"x":123,"y":456}
 {"x":123,"y":4567890123456789}
 {"x":4567890123456789,"y":123}
 {"x":4567890123456789,"y":4567890123456789}
 {"x":4567890123456789,"y":-4567890123456789}
(5 rows)

With the extra sub-select, "i" is no longer of the named composite
type associated with int8_tbl, but of an anonymous record type,
so it can have the column names you want.

                        regards, tom lane


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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Recent 11.16 release change
Следующее
От: Tom Lane
Дата:
Сообщение: Re: cast to domain with default collation issue.