po 31. 1. 2022 v 19:09 odesÃlatel Julien Rouhaud <rjuju...@gmail.com> napsal:
> Hi, > > On Mon, Jan 31, 2022 at 06:46:37PM +0100, Pavel Stehule wrote: > > > > I checked the last patch. I think it is almost trivial. I miss just > > comment, why this alias is necessary > > > > + if (!rte->alias) > > + rte->alias = makeAlias(get_rel_name(rte->relid), NULL); > > Thanks for looking at it Pavel! > > The alias is necessary because otherwise queries involving views won't > produce > valid SQL, as aliases for subquery is mandatory. This was part of the v1 > regression tests: > > +-- test pg_get_query_def() > +SELECT pg_get_query_def('SELECT * FROM shoe') as def; > + def > +-------------------------------------------------------- > + SELECT shoename, + > + sh_avail, + > + slcolor, + > + slminlen, + > + slminlen_cm, + > + slmaxlen, + > + slmaxlen_cm, + > + slunit + > + FROM ( SELECT sh.shoename, + > + sh.sh_avail, + > + sh.slcolor, + > + sh.slminlen, + > + (sh.slminlen * un.un_fact) AS slminlen_cm,+ > + sh.slmaxlen, + > + (sh.slmaxlen * un.un_fact) AS slmaxlen_cm,+ > + sh.slunit + > + FROM shoe_data sh, + > + unit un + > + WHERE (sh.slunit = un.un_name)) shoe; + > > the mandatory "shoe" alias is added with that change. > > I looked for other similar problems and didn't find anything, but given the > complexity of the SQL standard it's quite possible that I missed some other > corner case. > I don't feel good about forcing an alias. relname doesn't ensure uniqueness. You can have two views with the same name from different schemas. Moreover this field is necessary only when a deparsed query is printed, not always. Isn't possible to compute the correct subquery alias in print time when it is missing? Regards Pavel