1

我正在尝试从我的客户以前的软件供应商(不再出现在图片中)给我的备份中创建一个 Postgres 数据库。但我正在努力解决编码问题。我对 Postgres 不太熟悉(MySQL 是我的事),所以请原谅我的 n00bness。

当我运行时psql dbname < /path/to/file.backup,它会吐出以invalid command问号和奇怪字符字符串开头和结尾的各种行,最后一行输出是:

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。

4

1 回答 1

2

备份是“自定义格式”备份,而不是 SQL 脚本。pg_restore你用命令恢复它。请参阅pg_restore.

编码的事情将是一个更大的问题。使用 PostgreSQL 在 Windows 和 Linux 之间的语言环境和编码情况非常糟糕。pg_restore如果被告知在恢复过程中创建数据库,则可能无法创建数据库,因为 ctypeEnglish_United States.1252在 Mac OS X 上不存在,它是 Windows 主义。

我认为您要做的就是CREATE DATABASE自己使用相应的数据库LC_CTYPELC_COLLATElike en_US.utf-8。然后恢复到现有数据库。

于 2014-01-17T01:01:07.833 回答