Heroku上的pg_restore:"无法读取输入文件:文件结尾"

时间:2016-03-26 20:36:15

标签: postgresql heroku heroku-postgres

我正在尝试使用pg_dump / pg_restore utils将我的本地PostgreSQL数据库复制到Heroku应用程序。按照Heroku的官方指南进行操作:Dictionay Class

所以,我已经完成了转储:
pg_dump -Fc --no-acl --no-owner -h localhost -U myuser mydb > mydb.dump

然后我已将其上传到可通过网络服务器访问的地方(并且确实可以访问它,我已经检查过它使用wgetpg_restore下载文件 - 正常工作细)。

然后我试图恢复Heroku而没有运气:

kulver@kvb:~/projects/gop/gop_flask$ heroku pg:backups restore 'MY_URL_HERE' postgresql-corrugated-15763
r010 ---restore---> DATABASE
An error occurred and your backup did not finish.

Please run `heroku pg:backups info r010` for details.

以下是详细信息:

kulver@kvb:~/projects/gop/gop_flask$ heroku pg:backups info r010
=== Backup info: r010

Database:    BACKUP
Started:     2016-03-26 20:15:32 +0000
Finished:    2016-03-26 20:15:32 +0000
Status:      Failed
Type:        Manual
Backup Size: 23.9MB
=== Backup Logs
... a bunch of logs here ...
2016-03-26 20:15:32 +0000: pg_restore: processing data for table "cards"
2016-03-26 20:15:32 +0000: waiting for restore to complete
2016-03-26 20:15:32 +0000: pg_restore: [custom archiver] could not read from input file: end of file
2016-03-26 20:15:32 +0000: restore done
2016-03-26 20:15:32 +0000: waiting for download to complete
2016-03-26 20:15:32 +0000: download done

我试图重新制作转储文件,重新加载它 - 同样的错误。怎么了?为什么我可以在刚刚创建的数据库上下载并从中恢复,但不能在Heroku上恢复?

感谢您的任何建议。

3 个答案:

答案 0 :(得分:6)

我没有按照上面描述的方式加载转储,但是我已经找到了另一个对我来说很好的解决方案:

以简单的SQL格式进行转储:
pg_dump --no-owner mydb > mydb.dump

您可能需要切换到有权访问您的数据库的用户,例如postgres。所以,sudo su postgres然后进行转储。

然后使用psql工具加载它:
user@pc:~/path/to/your/dump$ heroku pg:psql < mydb.dump

答案 1 :(得分:1)

管道到文件似乎存在问题。我使用-f命令创建了转储以指定文件,从而解决了我的问题。

pg_dump -f mydb.dump -Fc --no-acl -no-owner -h localhost -U myUser --schema = public myDatabase

答案 2 :(得分:1)

仅遇到此问题,我无法使其与此处提供的答案配合使用,但由于某种原因将输出文件的扩展名更改为.psql可以解决此问题

pg_dump -Fc --no-acl --no-owner -h localhost -U myuser mydb > mydb.psql