我正在尝试从我的客户以前的软件供应商给我的备份创建一个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。
答案 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_CTYPE
和LC_COLLATE
en_US.utf-8
作为{{1}}。然后恢复到现有数据库。