Thread: 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