On Tue, 2024-01-09 at 14:17 -0800, Jeremy Schneider wrote: > I think we missed something in psql, pretty sure I applied all the > patches but I see this error: > > =# \l > ERROR: 42703: column d.datlocale does not exist > LINE 8: d.datlocale as "Locale", >
Thank you. I'll fix this in the next patch set. > This is interesting. Jeff your original email didn't explicitly show > any > other initcap() results, but on Ubuntu 22.04 (glibc 2.35) I see > different results: > > =# SELECT initcap('axxE áxxÉ DŽxxDŽ Džxxx džxxx'); > initcap > -------------------------- > Axxe Áxxé DŽxxdž DŽxxx DŽxxx > > =# SELECT initcap('axxE áxxÉ DŽxxDŽ Džxxx džxxx' COLLATE C_UTF8); > initcap > -------------------------- > Axxe Áxxé Džxxdž Džxxx Džxxx The reason for this difference is because libc doesn't support titlecase. In the next patch set, I'll not use titlecase (only uppercase/lowercase even for initcap()), and then it will match libc 100%. > The COLLATE sql syntax feels awkward to me. In this example, we're > just > using it to attach locale info to the string, and there's not > actually > any collation involved here. Not sure if COLLATE comes from the > standard, and even if it does I'm not sure whether the standard had > upper/lowercase in mind. The standard doesn't use the COLLATE clause for case mapping, but also doesn't offer any other mechanism to, e.g., get case mapping according to the "tr_TR" locale. I think what Postgres does here, re-purposing the COLLATE clause to allow tailoring of case mapping, is imperfect but reasonable. My proposal doesn't change that. Regards, Jeff Davis