我正在尝试根据客户以前的软件供应商提供给我的备份来创建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。
备份是“自定义格式”备份,而不是SQL脚本。使用pg_restore
命令还原它。请参阅有关的文档pg_restore
。
编码问题将是一个更大的问题。PostgreSQL与Windows和Linux之间的语言环境和编码情况非常糟糕。pg_restore
如果在还原过程中被告知创建数据库,则很可能无法创建数据库,因为English_United States.1252
在Mac OS X上不存在ctype ,这是Windows主义。
我认为您将要做的是CREATE DATABASE
自己创建一个具有相应LC_CTYPE
和LC_COLLATE
like的数据库en_US.utf-8
。然后还原到现有的数据库。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句