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)