Character encoding 创建/还原数据库时的Postgres编码问题

Character encoding 创建/还原数据库时的Postgres编码问题,character-encoding,postgresql-9.3,Character Encoding,Postgresql 9.3,我正试图从我的客户以前的软件供应商提供给我的备份中创建一个Postgres数据库(图中已不再显示),但我正在努力解决编码问题。我不太熟悉Postgres(MySQL是我的东西),所以请原谅我的N00B 当我运行psql dbname

我正试图从我的客户以前的软件供应商提供给我的备份中创建一个Postgres数据库(图中已不再显示),但我正在努力解决编码问题。我不太熟悉Postgres(MySQL是我的东西),所以请原谅我的N00B

当我运行
psql dbname
时,它会弹出各种各样的行,以
无效命令开始,以问号和奇怪字符字符串结束,最后一行输出是:

ERROR:  invalid byte sequence for encoding "UTF8": 0xf1 0x16 0x88 0x02
我在终端中打开了备份文件,看到许多SQL字符串中夹杂着不可打印的字符(表示为“^@”)。我认为顶部有一些字符串可能与此相关:

SET client_encoding = 'UTF8';

SET standard_conforming_strings = 'off';

CREATE DATABASE "cleaned_DB" WITH TEMPLATE = template0 ENCODING = 'UTF8' \
    LC_COLLATE = 'English_United States.1252' \
    LC_CTYPE = 'English_United States.1252';
所以看起来数据库使用的是UTF8编码,但软件供应商的开发机器使用的是WIN1252。我猜备份文件中的字符串在WIN1252中

如何导入此数据库?作为参考,我的开发机器正在运行Mac OSX。

备份是“自定义格式”备份,而不是SQL脚本。您可以使用
pg_restore
命令将其还原。看

编码问题将是一个更大的问题。使用PostgreSQL在Windows和Linux之间使用区域设置和编码的情况非常糟糕
pg_restore
如果被告知在还原过程中创建DB,则很可能无法创建DB,因为Mac OS X上不存在ctype
English_United States.1252
,它是Windows ism

我认为您需要做的是
创建数据库
使用相应的
LC\u CTYPE
LC\u COLLATE
创建数据库,如
en\u US.utf-8
。然后恢复到现有数据库