>直接来自pg_restore
pg_restore -C -d postgres –exit-on-error maggie_prod_20111221.dump.sql
>首先创建数据库和表空间
createdb -T template0 maggieprod -E LATIN1
sql:CREATE TABLESPACE magdat OWNER maggie LOCATION’/ somewhere / magdat’;
pg_restore -v -d template1 maggie_prod_20110121.dump.sql
pg_restore:[archiver(db)]处理TOC时出错:
pg_restore:[archiver(db)]来自TOC条目2308的错误; 1262 16386 DATABASE maggieprod postgres
pg_restore:[archiver(db)]无法执行查询:错误:编码LATIN1与区域设置en_CA.utf8不匹配
DETAIL:选择的LC_CTYPE设置需要编码UTF8.
命令是:CREATE DATABASE maggieprod with TEMPLATE = template0 ENCODING =’LATIN1’TABLESPACE = magdat;
使用第二个,当我尝试创建数据库时,我得到:
createdb:数据库创建失败:错误:编码LATIN1与区域设置en_CA.utf8不匹配
DETAIL:选择的LC_CTYPE设置需要编码UTF8.
所以似乎我无法创建LATIN1编码数据库?这是为什么?我是语言环境和编码的新手,并不太了解它们.我只知道转储是由LATIN1数据库完成的.
语言环境的输出是:
LANG = en_CA.utf8
LC_CTYPE = “en_CA.utf8”
LC_NUMERIC = “en_CA.utf8”
LC_TIME = “en_CA.utf8”
LC_COLLATE = “en_CA.utf8”
LC_MONETARY = “en_CA.utf8”
LC_MESSAGES = “en_CA.utf8”
LC_PAPER = “en_CA.utf8”
LC_NAME = “en_CA.utf8”
LC_ADDRESS = “en_CA.utf8”
LC_TELEPHONE = “en_CA.utf8”
LC_MEASUREMENT = “en_CA.utf8”
LC_IDENTIFICATION = “en_CA.utf8”
LC_ALL =
而locale -a的输出是:
C
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZW.utf8
POSIX
我不会在第二个命令中看到LATIN1,不是吗?如果是这样,我将如何添加它?假设我需要更改计算机上的语言环境,这是正确的吗?如果是这样,有没有办法只为postgresql做到这一点?此外,当我尝试打开转储时,我看到很多垃圾字符,我假设这是因为编码,我将如何正确地看待它?
谢谢你的帮助.