Обсуждение: Locale bug?
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
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
>>>>> 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
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