Locale bug?

Started by Sergey Suleymanovover 22 years ago4 messagesgeneral
Jump to latest
#1Sergey Suleymanov
solt@eatpbank.ru

Here is a simplificated example:

CREATE OR REPLACE FUNCTION ttt () RETURNS text AS '
return "";
' LANGUAGE 'plperlu';

CREATE OR REPLACE FUNCTION qqq () RETURNS text as '
DECLARE
v_text text;
v_text2 text;
BEGIN
v_text := upper(''О©╫О©╫''); -- cyrillic chars
v_text2 := ttt();
RETURN v_text || upper(''О©╫О©╫О©╫О©╫О©╫''); -- cyrillic chars
END;
' LANGUAGE 'plpgsql';

and qqq() returns "О©╫О©╫О©╫О©╫О©╫О©╫О©╫". That is upper() doesn't work correctly
after plperlu function call.

--
Sergey Suleymanov

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Sergey Suleymanov (#1)
Re: Locale bug?

Sergey Suleymanov <solt@eatpbank.ru> writes:

... That is upper() doesn't work correctly
after plperlu function call.

It sounds like Perl is taking it on itself to change the process'
LC_CTYPE settings. That's very nasty of it :-(. Can anyone confirm
that libperl does such things, or find a workaround to prevent it?

regards, tom lane

#3Sergey Suleymanov
solt@eatpbank.ru
In reply to: Sergey Suleymanov (#1)
Re: Locale bug?

Tom Lane writes:

... That is upper() doesn't work correctly after plperlu function
call.

Tom> It sounds like Perl is taking it on itself to change the
Tom> process' LC_CTYPE settings. That's very nasty of it :-(. Can
Tom> anyone confirm that libperl does such things, or find a
Tom> workaround to prevent it?

It seems a startup script issue. When I restarting postmaster
manualy (within root session with LC_CTYPE = ru_RU.KOI8-R)
everything works fine.

Do we need "export LANG=..." before starting postmaster?

--
Sergey Suleymanov

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Sergey Suleymanov (#3)
Re: Locale bug?

Sergey Suleymanov <solt@eatpbank.ru> writes:

Tom Lane writes:

... That is upper() doesn't work correctly after plperlu function
call.

Tom> It sounds like Perl is taking it on itself to change the
Tom> process' LC_CTYPE settings. That's very nasty of it :-(. Can
Tom> anyone confirm that libperl does such things, or find a
Tom> workaround to prevent it?

It seems a startup script issue. When I restarting postmaster
manualy (within root session with LC_CTYPE = ru_RU.KOI8-R)
everything works fine.

Do we need "export LANG=..." before starting postmaster?

Hm. The postmaster extracts the correct setlocale() values from the
pg_control file, but IIRC it doesn't bother to set the environment
variables LC_CTYPE etc. Maybe it should. Peter, I think this is your
turf --- what do you think?

regards, tom lane