Re: BUG #13636: psql numericlocale adds comma where it ought not
От | Tom Lane |
---|---|
Тема | Re: BUG #13636: psql numericlocale adds comma where it ought not |
Дата | |
Msg-id | 6391.1443194204@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Re: BUG #13636: psql numericlocale adds comma where it ought not (Thomas Munro <thomas.munro@enterprisedb.com>) |
Список | pgsql-bugs |
Thomas Munro <thomas.munro@enterprisedb.com> writes: > About your follow-up commit 6325527d845b629243fb3f605af6747a7a4ac45f, > I noticed that glibc localedata has some grouping values of 0 (no > grouping at all), for example nl_NL, el_GR, hr_HR, it_IT, pl_PL, > es_CU, pt_PT and we don't honour that, if it's 0 we use 3. All the > rest begin with 3, except for unm_US which uses 2;2;2;3 (apparently a > Delaware language), and I confirmed that now produces strings like "12 > 34 56", so I guess that obscure locale may be the only case that the > commit actually changes on a glibc system. Yeah, the locales where grouping isn't just 3 are so obscure that I don't particularly care. If someone from one of those areas wants to submit a feature patch to implement grouping more fully, more power to 'em ... However, I checked this morning and found that the MONEY case that was niggling me yesterday is indeed a problem, for instance in de_DE: $ LC_NUMERIC=de_DE psql regression psql (9.6devel) Type "help" for help. regression=# set lc_monetary = 'de_DE'; SET regression=# select '123456.78'::money; money ------------------- 12.345.678,00 EUR (1 row) regression=# \pset numericlocale on Locale-adjusted numeric output is on. regression=# select '123456.78'::money; money ------------------- 12,345.678,00 EUR (1 row) So we're gonna have to do something about that. I considered a few fixes: * Remove CASHOID from the set of datatypes that printQuery will choose to right-justify. This seems likely to annoy people who are used to having money amounts right-justified. * Separate "use locale formatting" from "right justify", and apply only the latter to CASHOID. This would be the cleanest fix but by far the most invasive. I don't particularly want to do that much work and I definitely wouldn't want to back-patch it. * Put a hack into format_numeric_locale() so that it won't mess with monetary output. This seems feasible because cash_out() always insists on using a non-empty currency symbol. For example, we could check that the string includes no characters outside "0123456789+-.eE" and feel pretty safe that no money value would pass the check. So I'm inclined to do the third one. Objections, better ideas? regards, tom lane
В списке pgsql-bugs по дате отправления: