Мне нужно переместить базу данных 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