Re: Matching uppercased russian words (\x0410-\x042F) in UTF8 database 8.4.13

Поиск
Список
Период
Сортировка
От Alexander Farber
Тема Re: Matching uppercased russian words (\x0410-\x042F) in UTF8 database 8.4.13
Дата
Msg-id CAADeyWhm3q67_J2=ED-9X3MYedHPSj6H7i99uADwdmFCXxv09g@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Matching uppercased russian words (\x0410-\x042F) in UTF8 database 8.4.13  (Albe Laurenz <laurenz.albe@wien.gv.at>)
Ответы Re: Matching uppercased russian words (\x0410-\x042F) in UTF8 database 8.4.13
Re: Matching uppercased russian words (\x0410-\x042F) in UTF8 database 8.4.13
Список pgsql-general
Thanks for trying! I am using CentOS 6.3

It seems to be better in 9.2.x?

Unfortunately I'd like to stay with 8.4.x for now
(because I use the PostgreSQL instance
with other projects at the same host)....

Regards
Alex


On Wed, Mar 20, 2013 at 10:35 AM, Albe Laurenz <laurenz.albe@wien.gv.at> wrote:
> Alexander Farber wrote:
>> I have prepared an SQL fiddle for my question:
>> http://sqlfiddle.com/#!11/8a494/4
>>
> Strange, it works here (RHEL 6, x86_64, PostgreSQL 9.2.2,
> encoding "UTF8", collation and ctype "de_DE.UTF8"):
>
> test=> SELECT 'ПРОВЕРКА' ~ '^[\u0410-\u042F]{2,}$';
>  ?column?
> ----------
>  t
> (1 row)
>
> test=> SELECT 'ABCDE' ~ '^[\u0410-\u042F]{2,}$';
>  ?column?
> ----------
>  f
> (1 row)
>
>> create table good_words (
>>         word varchar(64) primary key
>> );
>>
>> create or replace function keep_clean() returns trigger as $body$
>>         begin
>>                 new.word := upper(new.word);
>>
>>                 /* next line does not compile? */
>>                 IF new.word !~ '^[\x0410-\x042F]{2,}$' THEN
>>                     RAISE EXCEPTION 'Not an uppercased Russian word in UTF8';
>>                 END IF;
>>
>>                 IF new.word ~ '^[ЪЫЬ]' OR new.word ~ 'Ъ$' THEN
>>                     return NULL;
>>                 END IF;
>>
>>                 /* does not return NULL for 'ошибббка'? */
>>                 IF new.word ~ '(.)\1\1' AND new.word NOT LIKE '%ШЕЕЕ%'
>> AND new.word NOT LIKE '%ЗМЕЕЕ%' THEN
>>                     return NULL;
>
> This works for me as well:
>
> test=> SELECT 'ошибббка' ~ '(.)\1\1'
>           AND 'ошибббка' NOT LIKE '%ШЕЕЕ%'
>           AND 'ошибббка' NOT LIKE '%ЗМЕЕЕ%';
>  ?column?
> ----------
>  t
> (1 row)
>
> test=> SELECT 'ошиббка' ~ '(.)\1\1'
>           AND 'ошиббка' NOT LIKE '%ШЕЕЕ%'
>           AND 'ошиббка' NOT LIKE '%ЗМЕЕЕ%';
>  ?column?
> ----------
>  f
> (1 row)
>
>>                 END IF;
>>
>>                 return new;
>>         end;
>> $body$ language plpgsql;
>
> What do you get for
>
> SELECT pg_encoding_to_char(encoding),
>        datcollate,
>        datctype
> FROM pg_database WHERE datname = current_database();
>
> and for
>
> SHOW client_encoding;
>
> Yours,
> Laurenz Albe
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general


В списке pgsql-general по дате отправления:

Предыдущее
От: Vick Khera
Дата:
Сообщение: Re: File Fragmentation
Следующее
От: "jg"
Дата:
Сообщение: Re: File Fragmentation