powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding
8 сообщений из 8, страница 1 из 1
SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding
    #39622416
gruender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую.

21 марта на одном из слейвов произошла ошибка: SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding "UTF8": 0xd0

Ошибка произошла при чтении файла русского словаря: CONTEXT: line 42756 of configuration file "/usr/share/postgresql/9.6/tsearch_data/russian.dict" при запросе в общем-то со словарем никак не связанным: UPDATE "item" SET "balance"=N, "price"=M, "updated_at"=D WHERE "id"=K. Потом ошибки не было несколько дней и теперь она появляется раз в день. При этом при нескольких десятков миллионов хитов в день на сайте, ошибка происходит только один раз.

line в файле russian.dict, где произошла ошибка постоянно меняется, как и запрос. Файл russian.dict копируется из проекта в папку pg при деплое и после копирования выполняется команда ALTER TEXT SEARCH DICTIONARY russian_ispell (...). У меня была мысль, что эта команда выполняется во время выполнения какого-то запроса, что приводит к ошибке чтения файла словаря, но время ошибки не совпадает со временем деплоя. 0xd0 - это вроде как начало какого-то символа utf8, не до конца считанного, но почему-то тогда ошибка происходит при левых запросах, а не при ALTER TEXT SEARCH DICTIONARY, если есть проблемы с чтением файла словаря?

pg 9.6

Куда копать, я пока ума не приложу. В интернете пишут про такую ошибку, но применительно к другим кодировкам и советуют выставить client_encoding, но у нас, конечно, уже выставлен utf8, да и ошибка происходит всего раз в день рандомно, а не на всех db-серверах.
...
Рейтинг: 0 / 0
SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding
    #39622464
Alex__kK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gruender,

просто символ скорее всего попался в строке

Код: plsql
1.
select e'\0xd0'
...
Рейтинг: 0 / 0
SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding
    #39622540
gruender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex__kK,

0xd0 - это начало какого-то символа: http://www.utf8-chartable.de/unicode-utf8-table.pl?start=1024&number=128&names=2&utf8=0x
В файле russian.dict у нас все символы в порядке, "битых" нет.
...
Рейтинг: 0 / 0
SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding
    #39622700
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gruender,

не совсем понял, зачем вы словари все время теребонькаете.
ведь после этого надо всё переиндексировать.
или вы индексы не строите ?


пс: словари как рассылаете ? по фтп ? как тексты или как бинарники ?
...
Рейтинг: 0 / 0
SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding
    #39623010
gruender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

Словарь (как и тезаурус, и прочее) может быть подвержен изменениям, поэтому его заливают на слейвы. Ну и новые слейвы могут быть добавлены, поэтому тоже нужно залить. Заливка происходит автоматически при процедуре деплоя на прод, копирование идет через scp. Индексы перестраиваются по мере необходимости.
...
Рейтинг: 0 / 0
SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding
    #39623555
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gruender,

предположим, что ошибка возникает на неполностью переданном файле.
передача раз в день ?

табличка итемов индексирована ?
...
Рейтинг: 0 / 0
SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding
    #39623624
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gruenderПриветствую.

21 марта на одном из слейвов произошла ошибка: SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding "UTF8": 0xd0

Ошибка произошла при чтении файла русского словаря: CONTEXT: line 42756 of configuration file "/usr/share/postgresql/9.6/tsearch_data/russian.dict" при запросе в общем-то со словарем никак не связанным: UPDATE "item" SET "balance"=N, "price"=M, "updated_at"=D WHERE "id"=K. Потом ошибки не было несколько дней и теперь она появляется раз в день. При этом при нескольких десятков миллионов хитов в день на сайте, ошибка происходит только один раз.

line в файле russian.dict, где произошла ошибка постоянно меняется, как и запрос. Файл russian.dict копируется из проекта в папку pg при деплое и после копирования выполняется команда ALTER TEXT SEARCH DICTIONARY russian_ispell (...). У меня была мысль, что эта команда выполняется во время выполнения какого-то запроса, что приводит к ошибке чтения файла словаря, но время ошибки не совпадает со временем деплоя. 0xd0 - это вроде как начало какого-то символа utf8, не до конца считанного, но почему-то тогда ошибка происходит при левых запросах, а не при ALTER TEXT SEARCH DICTIONARY, если есть проблемы с чтением файла словаря?

pg 9.6

Куда копать, я пока ума не приложу. В интернете пишут про такую ошибку, но применительно к другим кодировкам и советуют выставить client_encoding, но у нас, конечно, уже выставлен utf8, да и ошибка происходит всего раз в день рандомно, а не на всех db-серверах.

Словарь читается при первом к нему обращении в ЛЮБОМ новом процессе базы. Т.е. установили коннект новый к базе, когда этот самый файл russian.dict копируется но не докопировался - обратились к нему первый раз например из вышеупомянутого запроса где на Items скорее всего FTS индекс есть (в этом конкретном коннекте) - получили вышеописанную ошибку.
Вы вообще где то читали в документации что эти файлы можно менять на запущенной базе?
Так что появление ошибок зависит от фазы луны и тд (как совпадет время копирования и время первого обращения к словарю).

Посоветовать могу только каждый раз dict под новым именем копировать чтобы не было ситуации когда база видит и пытается использовать неполный файл.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding
    #39623986
gruender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwqgruender,

предположим, что ошибка возникает на неполностью переданном файле.
передача раз в день ?

табличка итемов индексирована ?
Передача один-два раза в день.
Да, индексирована.

Maxim Boguk
Посоветовать могу только каждый раз dict под новым именем копировать чтобы не было ситуации когда база видит и пытается использовать неполный файл.

Понял, спасибо, попробую.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]