创建/还原数据库上的Postgres编码问题

Curtisdf

我正在尝试根据客户以前的软件供应商提供给我的备份来创建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。

克雷格·林格(Craig Ringer)

备份是“自定义格式”备份,而不是SQL脚本。使用pg_restore命令还原它请参阅有关的文档pg_restore

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

我认为您将要做的是CREATE DATABASE自己创建一个具有相应LC_CTYPELC_COLLATElike的数据库en_US.utf-8然后还原到现有的数据库。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章