Перенос базы postgresql с Windows на linux

Добрый день! Уже несколько дней не могу решить проблему переноса базы данных postgresql с виндовой машины на линуксовую, проблема с кодировками.

Версия PostgreSQL: 9.4

База данных на Windows имеет следующие параметры:
Кодировка: UTF-8
Сопоставление: Russian_Russian.1251
Тип символа: Russian_Russian.1251

При попытке создать базу данных на линуксе с такими же параметрами выдается:

postgres=# CREATE DATABASE database WITH OWNER = postgres ENCODING = 'UTF-8' LC_COLLATE = 'ru_RU.cp1251' LC_CTYPE = 'ru_RU.cp1251' CONNECTION LIMIT = -1;

ОШИБКА: кодировка "UTF8" не соответствует локали "ru_RU.cp1251"
ПОДРОБНОСТИ: Для выбранного параметра LC_CTYPE требуется кодировка "WIN1251".

Т.е. либо всё должно быть в UTF-8, либо в WIN1251

Вопрос, почему для Windows нормально, когда база данных в одной кодировке, а сопоставление и тип в другой, а для линукса это страшный грех?
И как быть в такой ситуации? Как перенести базу данных из Windows в линукс?
Помогите, пожалуйста..

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

А вы попробуйте создать базу

А вы попробуйте создать базу в UTF-8 и перенести дамп. И посмотрите что получится.
Что касается LC_COLLATE, то в общем-то логично. Я, например, не понимаю как могут быть данные в многобайтовой UTF-8, а сортировка осуществляться по правилом однобайтовой кодировки windows-1251.

Вы уверены, что всё правильно понимаете про базу в Windows?
Зайдите в windows в psql и наберите там команду "\l". Должно получиться что-то типа того, что ниже:

postgres=# \l
                                  Список баз данных
    Имя    | Владелец | Кодировка | LC_COLLATE  |  LC_CTYPE   |     Права доступа     
-----------+----------+-----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 | 
 template0 | postgres | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres          +
           |          |           |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres          +
           |          |           |             |             | postgres=CTc/postgres
 tmp       | postgres | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 | 

Проверьте точно ли у вас UTF-8 соседствует с cp1251.

Вывод psql

Спасибо за ответ!
Пробовал создавать базу в UTF-8 и перенести дамп в нее, с виду все хорошо, база заливается без ошибок, но потом в ходе работы обнаруживаются косяки, не может найти и подхватить значения в некоторых местах...

Вывод на Windows машине:

postgres=# \l
Список баз данных
Имя | Владелец | Кодировка | LC_COLLATE | LC_CTYPE | Права доступа
-----------+----------+-----------+---------------------+---------------------+-----------------------
postgres | postgres | UTF8 | Russian_Russia.1251 | Russian_Russia.1251 |
project | postgres | UTF8 | Russian_Russia.1251 | Russian_Russia.1251 |
template0 | postgres | UTF8 | Russian_Russia.1251 | Russian_Russia.1251 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | Russian_Russia.1251 | Russian_Russia.1251 | =c/postgres +
| | | | | postgres=CTc/postgres
database | postgres | UTF8 | Russian_Russia.1251 | Russian_Russia.1251 |

Судя по выводу действительно UTF-8 соседствует с windows-1251.. вопрос остается открытым.

доброго дня. А вы попробуйте

Изображение Игорь

доброго дня. А вы попробуйте перекодировать дамп из 1251 в utf. Хотя это у вас 1С и перекодировать наверно даже вредно.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023