heroku pgbackups:restore: 无效的转储格式

Posted

技术标签:

【中文标题】heroku pgbackups:restore: 无效的转储格式【英文标题】:heroku pgbackups:restore: Invalid dump format 【发布时间】:2012-12-23 20:43:40 【问题描述】:

我有一个本地 psql 数据库转储,需要上传到 heroku。我按照this link 的更新部分中的步骤进行操作。一切正常,直到最后一部分,实际上传步骤:

heroku pgbackups:restore --app myAppName DATABASE 'https://www.dropbox.com/myAppPSQLDumpLink/myAppName_local.dump' --confirm myAppName

这就是控制台中显示的内容:

HEROKU_POSTGRESQL_SILVER_URL (DATABASE_URL)  <---restore---  myAppName_local.dump

Retrieving... done

 !    An error occurred and your restore did not finish.

这是日志中的错误(由 Toby Hede's question 提供):

2013-01-09T15:39:09+00:00 app[pgbackups]: Invalid dump format: /tmp/GgUz5yU4bF/project_mgr_development_local.dump: html document text

我尝试搜索此错误,但找不到答案。有谁知道需要做些什么来解决这个问题?我的本地 psql 数据库的实际转储是这样执行的:

pg_dump -Fc --no-acl --no-owner -U myUserName  > myAppName_local.dump

谢谢!

【问题讨论】:

我最终将数据库转储上传到 heroku 应用程序的方式是使用 postgres.heroku.com 工具。您需要: 1) 选择要为其更新数据库的 Heroku 应用程序 2) 从“连接设置”下拉列表中选择“PG 还原” 3) 使用指向数据库转储的正确链接复制并粘贴所提供的文本. Heroku 上似乎不再提供 PG 还原选项。 【参考方案1】:

看起来 Dropbox 上的转储链接正在重定向或指向 HTML 页面(错误中的 HTML 文档文本)。访问链接并确保您直接获得转储。或者在浏览器中下载转储,右键单击它并复制下载链接。该链接应该与 pgbackups:restore 一起使用。

【讨论】:

在浏览器中下载转储文件,右键单击它并复制下载链接。谢谢! 我有一个直接指向文件的保管箱链接...仍然收到错误消息! :( 是的,该链接只是将您带到一个带有下载链接的页面。您需要右键单击下载按钮并复制该网址。 啊啊啊啊!你刚刚把我从 2 小时的拔毛会议中救了出来。让我感到困惑的是保管箱重定向,而不是在 mysql 到 psql 转换过程中出现的一些奇怪的转储转义问题。您,先生,我由衷的感谢!!! 我最近不得不再次这样做,现在使用 Dropbox 的正确格式是 dl.dropboxusercontent.com/s/whatever/my.dump【参考方案2】:

Dropbox 提供了直接下载文件的解释 (https://www.dropbox.com/en/help/201) 这对于使用 pg_backups 中的保管箱链接很有帮助。

简而言之,它说下载链接带有选项“dl=1”而不是“dl=0”。但这对我不起作用。即使复制下载文件的地址对我也不起作用。

如果您遇到上述问题,请尝试将文件移动到公用文件夹并从那里复制链接。这对我有用。

【讨论】:

@Stonz2 嗨,我是新来的。你觉得现在的答案怎么样? 首先,欢迎来到 Stack Overflow!格式化后,您的答案现在好多了。如果您对什么是好的答案还有其他疑问,请参阅帮助中心的 Answering。【参考方案3】:

根据Importing and Exporting Heroku Postgres Databases with PG Backups,您可以在终端恢复转储:

$ curl -o latest.dump `heroku pgbackups:url --app heroku_appname`
$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump

【讨论】:

如果您在本地恢复转储,这将起作用。最初的问题要求在 Heroku 实例上恢复转储【参考方案4】:

得到相同的错误,但不同的原因,所以不同的解决方案。也许它可以帮助某人。

如果您使用 HTTPS 将转储文件存储在服务器中,并且您错误地将 HTTP 用于数据库 URL,则转发将被解释为 HTML 文档。

所以改变

heroku pgbackups:restore --app myAppName DATABASE 'http://www.example.com/my.dump' --confirm myAppName

heroku pgbackups:restore --app myAppName DATABASE 'https://www.example.com/my.dump' --confirm myAppName

【讨论】:

感谢您为帮助他人所做的努力。然而,在这个问题中,问题表明他已经使用了 https。因此,这不是对问题的回答,而是对可能尚未提出的另一个可能类似问题的回答。如果您愿意,您可以自己发布修改后的问题,也可以自己回答。 谢谢!她没有明确声明她知道她正在使用 https(只是在 Dropbox 上托管的转储文件乱搞,恰好使用 https)所以她和其他人可能不知道 https 与“无效的转储格式”有任何关系.相同的错误信息,但不同的原因。不过,您是对的,创建并回答一个新问题来讨论这个问题是个好主意。

以上是关于heroku pgbackups:restore: 无效的转储格式的主要内容,如果未能解决你的问题,请参考以下文章

ENOTFOUND:getaddrinfo ENOTFOUND api.heroku.com api.heroku.com:443 Heroku 创建错误

heroku create ENOTFOUND: getaddrinfo ENOTFOUND api.heroku.com api.heroku.com:443

Heroku:“heroku ps:exec”和“heroku run bash”有啥区别?

如何将heroku cedar-14堆栈应用程序升级到最新的heroku堆栈(即,升级到heroku 18)

heroku 在构建脚本中失败,但 heroku 本地网络很好

Heroku - 为啥在向 Heroku 推送版本时会出现错误 R12(退出超时)?