БД сервера событий была перенесена из PostgreSQL 8.3 на PostgreSQL 9.1.4. Сервер, развернутый на Windows платформе, не мог с ней работать, т.к. установщик PostgreSQL 9.1.4 создает шаблон базы с использованием кодировки UTF8 и, сответственно, новая БД не могла быть создана с требуемой сервером кодировкой WIN1251. Кластер баз данных был проинициализирован, кодировка задана WIN1251, создана новая БД в которую была восстановлена старая БД из бэкапа. Сервер запустился, все работает, но PostgreSQL теперь засыпает лог приложений системы ошибками вида:
ОШИБКА: неверная последовательность байт для кодировки "WIN1251": 0x00
ОПЕРАТОР: INSERT INTO Event(device_id,object_id,object_group_id,event_time,event_create_time,event_type,event_subtype,source_type,source_id,channel_id,channel_net,object_state,object_state_change,message_id,device_number,partition_number,object_number,sensor_number,pin_number,key_number,info,server_id,device_addr,shift_id,event_data_size,event_data) VALUES(879,879,22,'2012-08-03 10:10:59','2012-08-03 10:10:06',3,19,1,0,0,1,285278208,17825792,478,129479,0,1056,-1,-1,-1,'',1,0,0,51,E'\315\345\350\361\357\360\340\342\355\356\361\362\374 \361\356\362\356\342\356\351 \361\345\362\350 1, \312\356\344 \355\345\350\361\357\360\340\342\355\356\361\362\350: 2\000')
ОШИБКА: неверная последовательность байт для кодировки "WIN1251": 0x00
ОПЕРАТОР: INSERT INTO Event(device_id,object_id,object_group_id,event_time,event_create_time,event_type,event_subtype,source_type,source_id,channel_id,channel_net,object_state,object_state_change,message_id,device_number,partition_number,object_number,sensor_number,pin_number,key_number,info,server_id,device_addr,shift_id,event_data_size,event_data) VALUES(1379,1360,24,'2012-08-03 10:10:46','2012-08-03 10:10:40',3,19,1,0,0,0,285212672,0,587,131127,0,3150,-1,-1,-1,'',1,0,0,51,E'\315\345\350\361\357\360\340\342\355\356\361\362\374 \361\356\362\356\342\356\351 \361\345\362\350 1, \312\356\344 \355\345\350\361\357\360\340\342\355\356\361\362\350: 2\000')
Если кто знает, подскажите, пожалуйста, как это поправить.
Комментарии
> Сервер, развернутый на
> Сервер, развернутый на Windows платформе, не мог с ней работать, т.к. установщик PostgreSQL 9.1.4 создает шаблон базы с использованием кодировки UTF8
Как зададите, то и создаст. И вообще, если у вас база по умолчанию в UTF-8, никто не мешает создать ДРУГУЮ базу в другой кодировке.
Проблема в том, что дефолтная кодировка при вставке не совпадает с кодировкой БД, отсюда и проблемы. Приведите кодировки в соответствие и будет вам счастье. Можно попробовать начать с команды SQL: SET CLIENT_ENCODING TO кодировка перед вставкой данных.
вот скрины, кодировки правильные, проблема с отдельными строками
http://s2.ipicture.ru/uploads/20120803/2icX3aMu.jpg
http://s2.ipicture.ru/uploads/20120803/SKkEnPBd.jpg
http://s2.ipicture.ru/uploads/20120803/HNZKzpld.jpg
Если бы кодировки были
Если бы кодировки были правильными, всё работало бы правильно.
А раз работает неправильно, ищите где накосячили с кодировками, больше ничего вам посоветовать не могу.
Похожая проблема
Только у нас база UTF8.
Сколько раз раньше обновлял postgres, проблем не было никогда. Теперь вот появилась - после восстановления из бэкапа - те же синдромы. Если косяки с кодировками у нас, то почему же они раньше на протяжении нескольких лет не проявлялись?
Косяк со сборкой postgres - больше похоже на правду.
Внимательно проверьте: 1.
Внимательно проверьте:
1. Дефолтную кодировку сервера БД. Возможно поинитили класте БД с другой кодировкой вот вам и проблема.
2. Дефолтную кодировку клиента.
3. Кодировку именно проблемной БД.
4. Проанализируйте как вы восстанавливали из бакапа - если бакап был текстовый и пользовались psql, стояла ли нужная кодировка клиета (psql) при восстановлении?
Косяк со сборкой тоже возможен, в жизни всякое случается, но сборка не влияет на то какую кодировку вы выбираете для клиента и вашей БД.
"Внимательно проверьте:" ;)
Было бы очень полезно, если б Вы привели соответствующие селекты или типовые пути к файлам, в которых всё это смотреть, и имена соответствующих параметров.
Было бы неплохо, если бы
Было бы неплохо, если бы администраторы СУБД всё-таки читали Мануал, ссылка на который красуется в главном меню, прежде чем задвать вопросы.