从.dump文件恢复Postgres:编码为“UTF8”的无效字节序列

7

我已经使用以下命令下载了最新的Heroku数据库副本:

$ curl -o latest.dump `heroku pg:backups public-url --app myapp`

这将在我的本地机器上生成以下类型的文件:

$ file db/latest.dump
    db/latest.dump: PostgreSQL custom database dump - v1.12-0

我正在尝试使用psql将此内容导入到我的本地Postgres数据库(my_db)中。但是,我遇到了很多错误:

$ psql my_db < db/latest.dump
    ...
    psql:db/latest.dump:119425: invalid command \?A~??ܣb?{#?+????LS??
    psql:db/latest.dump:119426: invalid command \D%!ѡ/F??g????A???dC????|2?M?$?8GTJ??c?E?;??֛Sh??S?[NP?f?2?+H?W????k
    ... [thousands of lines]
    psql:db/latest.dump:261719: ERROR:  invalid byte sequence for encoding "UTF8": 0xba

使用命令psql -f db/latest.dump my_db时会失败。

为了将此文件本地导入具有相同模式等的新数据库,需要执行什么操作?

1个回答

17

我能够使用pg_restore来解决问题:

pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d my_db db/latest.dump 

3
我认为你不能使用备份文件与psql:Heroku的“[备份文件使用了pg_dump中的自定义格式选项](https://devcenter.heroku.com/articles/heroku-postgres-import-export#export)”,而且“[自定义格式的转储不是`psql`的脚本,而必须用`pg_restore`来恢复](http://www.postgresql.org/docs/9.1/static/backup-dump.html#BACKUP-DUMP-LARGE)”。 - matt
顺便说一句,如果您使用的是当前版本的PostgreSQL,psql会告诉您正在尝试恢复自定义格式的转储文件,并应该使用pg_restore - Craig Ringer
1
@CraigRinger 在哪里可以看到这个信息?我正在使用9.4版本,但没有看到它。 - Tyler
@tyler 啊,可能只对 psql -f dumpfile 有效。我认为这个补丁已经被合并到9.4版本中了... - Craig Ringer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接