Re: BUG #17946: LC_MONETARY & DO LANGUAGE plperl - BUG - Mailing list pgsql-bugs
From | Joe Conway |
---|---|
Subject | Re: BUG #17946: LC_MONETARY & DO LANGUAGE plperl - BUG |
Date | |
Msg-id | ca35e375-be82-322d-8c81-78127d8fb33f@joeconway.com Whole thread Raw |
In response to | Re: BUG #17946: LC_MONETARY & DO LANGUAGE plperl - BUG ("Tristan Partin" <tristan@neon.tech>) |
Responses |
Re: BUG #17946: LC_MONETARY & DO LANGUAGE plperl - BUG
(Joe Conway <mail@joeconway.com>)
|
List | pgsql-bugs |
On 6/9/23 11:31, Tristan Partin wrote: > On Mon Jun 5, 2023 at 11:00 AM CDT, Heikki Linnakangas wrote: >> On 25/05/2023 15:33, Tom Lane wrote: >> > PG Bug reporting form <noreply@postgresql.org> writes: >> >> After upgrading an application using Postgresql from version 10 to 12, >> >> fields of type "money" are no longer generated with the € symbol but with >> >> $. >> > >> > Hmm, seems to work for me: >> >> I can reproduce this: >> >> psql (16beta1) >> Type "help" for help. >> >> postgres=# DO LANGUAGE 'plperl' $$ elog(NOTICE, 'foo') $$; >> NOTICE: foo >> DO >> postgres=# SET lc_monetary TO 'en_GB.UTF-8'; >> SET >> postgres=# SELECT 12.34::money AS price; >> price >> -------- >> $12.34 >> (1 row) >> >> >> If I don't call the plperl function, it works as expected: >> >> sql (16beta1) >> Type "help" for help. >> >> postgres=# SET lc_monetary TO 'en_GB.UTF-8'; >> SET >> postgres=# SELECT 12.34::money AS price; >> price >> -------- >> £12.34 >> (1 row) >> >> I should note that 'en_GB.UTF-8' is the default locale in my system, and >> that's what I used in initdb. I don't know if it makes a difference. > > I am looking into this bug. I have also reproduced it. It reproduces for me on both pg16beta1 and pg10. I wonder if it isn't a behavior change in libperl itself. It seems that merely doing "load 'plperl';" is enough to cause the issue as long as it is done prior to doing "SET lc_monetary TO 'en_GB.UTF-8'; SELECT 12.34::money AS price;". When done in the opposite order the problem does not occur. 8<------------------------------ # On pg10 with perl v5.34.0 # note that on my system # LC_NUMERIC="" # LC_ALL="" # LANG="en_US.UTF-8" # # this works correctly psql nmx << EOF SET lc_monetary TO 'en_GB.UTF-8'; SELECT 12.34::money AS price; load 'plperl'; SELECT 12.34::money AS price; EOF SET price -------- £12.34 (1 row) LOAD price -------- £12.34 (1 row) # this does not psql nmx << EOF SET lc_monetary TO 'en_GB.UTF-8'; load 'plperl'; SELECT 12.34::money AS price; EOF SET LOAD price -------- $12.34 (1 row) 8<------------------------------ Since I am also seeing this on pg10, I wonder if it is a change in perl.I found this[1]: "What did change is that perl space code no longer pays attention to the LC_NUMERIC category outside 'use locale'. This is the way it has always worked, AFAIK, for LC_COLLATE and, mostly, LC_CTYPE, and for some uses of LC_NUMERIC." [1] "locale changes in 5.19.1 break LC_NUMERIC handling" https://github.com/Perl/perl5/issues/13089 -- Joe Conway PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com
pgsql-bugs by date: