创建/恢复数据库上的Postgres编码问题

时间:2014-01-16 23:50:44

标签: character-encoding postgresql-9.3

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

当我运行psql dbname < /path/to/file.backup时,它会以#{1}}开头并以问号和奇怪字符串结尾排出各种行,最后一行输出为:

invalid command

我在终端中打开了备份文件,我看到许多SQL字符串中散布着不可打印的字符(表示为“^ @”。)我认为顶部有一些字符串可能与此相关:

ERROR:  invalid byte sequence for encoding "UTF8": 0xf1 0x16 0x88 0x02

所以看起来数据库使用的是UTF8编码,但软件厂商的开发机器正在使用WIN1252。我猜备份文件中的字符串是在WIN1252中吗?

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

1 个答案:

答案 0 :(得分:1)

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

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

我认为您必须自己CREATE DATABASE使用相应的LC_CTYPELC_COLLATE en_US.utf-8作为{{1}}。然后恢复到现有数据库。