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_de0d8...@icloud.com> wrote:
> Daniel Brinzila 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
>
>
>