在 Heroku 上无法 pg_restore:"could not read from input file: end of file"
Cant pg_restore on Heroku: "could not read from input file: end of file"
我正在尝试使用 pg_dump
/ pg_restore
实用程序将本地 PostgreSQL 数据库复制到 Heroku 应用程序。按照 Heroku 的官方指南做:https://devcenter.heroku.com/articles/heroku-postgres-import-export
所以,我完成了转储:
pg_dump -Fc --no-acl --no-owner -h localhost -U myuser mydb > mydb.dump
然后我将它上传到一个可访问的网络服务器上(它真的可以访问,我已经检查过它使用 wget
下载文件并 pg_restore
ing 它 - 工作正常) .
然后我尝试在 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 上?
感谢您的任何建议。
我未能完全按照上述方式加载转储,但我找到了另一个对我来说效果很好的解决方案:
以简单的 SQL 格式转储:
pg_dump --no-owner mydb > mydb.dump
您可能需要切换到有权访问您的数据库的用户,例如 postgres
。所以,sudo su postgres
然后进行转储。
然后用psql
工具载入:
user@pc:~/path/to/your/dump$ heroku pg:psql < mydb.dump
文件的管道传输似乎有问题。我使用 -f 命令创建转储以指定文件并解决了我的问题。
pg_dump -f mydb.dump -Fc --no-acl -no-owner -h localhost -U myUser --schema=public myDatabase
刚刚遇到这个问题,我无法使用这里提供的答案来解决它,但是将输出文件的扩展名更改为 .psql
由于某种原因设法修复了它
pg_dump -Fc --no-acl --no-owner -h localhost -U myuser mydb > mydb.psql
我正在尝试使用 pg_dump
/ pg_restore
实用程序将本地 PostgreSQL 数据库复制到 Heroku 应用程序。按照 Heroku 的官方指南做:https://devcenter.heroku.com/articles/heroku-postgres-import-export
所以,我完成了转储:
pg_dump -Fc --no-acl --no-owner -h localhost -U myuser mydb > mydb.dump
然后我将它上传到一个可访问的网络服务器上(它真的可以访问,我已经检查过它使用 wget
下载文件并 pg_restore
ing 它 - 工作正常) .
然后我尝试在 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 上?
感谢您的任何建议。
我未能完全按照上述方式加载转储,但我找到了另一个对我来说效果很好的解决方案:
以简单的 SQL 格式转储:
pg_dump --no-owner mydb > mydb.dump
您可能需要切换到有权访问您的数据库的用户,例如 postgres
。所以,sudo su postgres
然后进行转储。
然后用psql
工具载入:
user@pc:~/path/to/your/dump$ heroku pg:psql < mydb.dump
文件的管道传输似乎有问题。我使用 -f 命令创建转储以指定文件并解决了我的问题。
pg_dump -f mydb.dump -Fc --no-acl -no-owner -h localhost -U myUser --schema=public myDatabase
刚刚遇到这个问题,我无法使用这里提供的答案来解决它,但是将输出文件的扩展名更改为 .psql
由于某种原因设法修复了它
pg_dump -Fc --no-acl --no-owner -h localhost -U myuser mydb > mydb.psql