Обсуждение: Locale bug?

Поиск
Список
Период
Сортировка

Locale bug?

От
Sergey Suleymanov
Дата:
       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

Re: Locale bug?

От
Tom Lane
Дата:
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

Re: Locale bug?

От
Sergey Suleymanov
Дата:
>>>>> 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

Re: Locale bug?

От
Tom Lane
Дата:
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