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 <briuz...@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 > > >