在8.4中恢复Postgres 8.3 dump

我需要将PostgreSQL数据库从8.3 Windows迁移到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”来恢复数据库,这样我得到了我的程序中不支持的字符。

如果我尝试使用这个命令创build数据库:

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 

首先,我如何让我的操作系统包含这个区域configuration?

Windows-1252字符集在Ubuntu中被称为CP1252

一般来说,在Ubuntu上默认不安装相应的语言环境,因为Unix的人更喜欢iso-8859-15utf-8

但是charmap应该由locales包提供。 假设安装了这个软件包,你可以发出这样的命令来创build相关的区域设置:

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

然后运行sudo /etc/init.d/postgresql restart postgres来获取新的语言环境,避免Ubuntu 12.04上的Postgresql 9.2“locale name”无效 。

那么你应该能够像在问题中那样运行createdb ,除了locale名称是en_US.CP1252而不是Windows-ish English_United States.1252