Назад | Перейти на главную страницу

Восстановление дампа Postgres 8.3 в 8.4

Мне нужно переместить базу данных PostgreSql с 8.3 Windows на 8.4, работающую в Linux (Ubuntu Server 12.04).

Восстановление, по-видимому, в порядке, но когда я пытаюсь показать данные в своей программе, я получаю сообщение об ошибке, в котором говорится, что некоторые символы не поддерживаются в кодировке WIN1252.

Исходная база данных имеет следующие свойства:

Кодировка: WIN1252 LC_CTYPE: English_United States.1252 LC_COLLATE: English_United States.1252

Я могу восстановить базу данных, используя LC_CTYPE = "C" и LC_COLLATE = "C", таким образом я получаю неподдерживаемые символы в моей программе.

Если я попытаюсь создать базу данных с помощью этой команды:

createdb -h 127.0.0.1 \
--encoding=WIN1252 \
--lc-ctype='English_United States.1252' \
--lc-collate='English_United States.1252' \
-T template0  -U postgres mydb

Я получаю такую ​​ошибку:

createdb: falló la creación de la base de datos:
ERROR:  el nombre de configuración regional «English_United States.1252» no es válido

Прежде всего, как я могу позволить моему О.С. включить эту региональную конфигурацию ?.

Набор символов Windows-1252 известен в Ubuntu под другим названием. CP1252.

Как правило, соответствующая локаль не устанавливается по умолчанию в Ubuntu, поскольку пользователи Unix предпочитают iso-8859-15 или utf-8.

Однако карта символов должна быть предоставлена locales пакеты. Предполагая, что этот пакет установлен, вы можете ввести такую ​​команду, чтобы создать соответствующий языковой стандарт:

sudo localedef -f CP1252 \ 
               -i /usr/share/i18n/locales/en_US \
               /usr/lib/locale/en_US.CP1252

Тогда беги sudo /etc/init.d/postgresql restart для postgres, чтобы выбрать новую локаль, избегая Postgresql 9.2 «недопустимое имя локали» в Ubuntu 12.04.

Тогда вы сможете запустить createdb как и в вопросе, за исключением названия локали, которое en_US.CP1252 вместо Windows-ish English_United States.1252