On Tue, Dec 7, 2021 at 12:30 PM Tom Lane <t...@sss.pgh.pa.us> wrote: > If we consider that the alias renames the columns "for all purposes", > how is it okay for f() to select the "a" column?
I'd say it isn't. > Another way to phrase the issue is that the column names seen > by f() are currently different from those seen by row_to_json(): > > regression=# select row_to_json(t) from t as t(x,y); > row_to_json > ----------------- > {"x":11,"y":12} > (1 row) > > and that seems hard to justify. Yeah, I agree. The problem I have here is that, with your proposed fix, it still won't be very consistent. True, row_to_json() and f() will both see the unaliased column names ... but a straight select * from t as t(x,y) will show the aliased names. That's unarguably better than corrupting your data, but it seems "astonishing" in the POLA sense. -- Robert Haas EDB: http://www.enterprisedb.com