LINUX.ORG.RU

Postgres, POSIX и upper-case


0

0

Добрый день, народ!

У меня работает Postgres 8.1.4.
Настройки локали такие:

enterprise# SHOW LC_COLLATE;
lc_collate
-------------
ru_RU.UTF-8
(1 запись)

enterprise=# SHOW LC_CTYPE;
lc_ctype
-------------
ru_RU.UTF-8
(1 запись)

В одной из таблиц появились такие пользовательские записи, что запрос в программе:

SELECT * FROM vw_прайс WHERE UPPER(ИМЯ) LIKE '%тосол%'; ,

который раньше работал нормально, стал выдавать такую ошибку:

ERROR: неверная последовательность байт имя кодировки "UTF8": 0xe9f820


Решил устранить проблему, избавившись от функции UPPER():

SELECT * FROM vw_прайс WHERE ИМЯ ~* '.*тосол.*';

Стало работать быстрее, но не находит выражения, в которых слово "тосол" начинается с большой буквы. Попробовал по-другому:

enterprise=# SELECT 'Тосол (5л)' ~* '.*тосол.*';
?column?
----------
f
(1 запись)


enterprise=# SELECT 'Тосол (5л)' ~* '.*Тосол.*';
?column?
----------
t
(1 запись)

Т.е. получается, что в моем случае конструкция ~* с русскими буквами не работает. С английскими словами все работает нормально. Подскажите, пожалуйста, что тут можно сделать?

anonymous

vacuum сделай полный
у меня была похожая проблема, что запрос не выдавал записи, хотя я видел по данным, что он был должен это сделать
после вакума - заработал нормально
но у меня версия 7.4.x

anonymous
()

у меня примерно такие фокусы наблюдались после того, как я переходил с версии на версию путем backup/restore.

ничего такого не делал?

Rastafarra ★★★★
()

> Т.е. получается, что в моем случае конструкция ~* с русскими буквами не работает.

регулярные выражения не рабтают с кодировкой utf-8... увы...

Eshkin_kot ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.