Heroku pgbackups:restore: 无效的转储格式。

10

我有一个本地的psql数据库转储文件需要上传到heroku。我按照这个链接中“更新”部分的步骤进行操作。一切都很顺利,直到最后一个部分:实际的上传步骤:

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的问题):

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应用程序的方法是使用https://postgres.heroku.com/工具。您需要: 1)选择要更新数据库的Heroku应用程序 2)从“连接设置”下拉菜单中选择“PG Restore” 3)复制并粘贴提供的文本,使用正确的链接到您的数据库转储文件。 - AndraD
在Heroku上似乎不再提供PG还原选项。 - allenwlee
4个回答

17

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


3
在浏览器中下载转储文件,右键单击它并复制下载链接可行。谢谢! - AndraD
我有一个直接链接到文件的Dropbox链接...仍然出现错误!:( - Nitish Upreti
是的,该链接只会带您到一个包含下载链接的页面。您需要右键单击下载按钮并复制该URL。 - Finnjon
啊啊啊啊啊!你刚刚救了我两个小时拔头发的痛苦。让我困扰的不是在 mysql 转换到 psql 过程中出现的一些奇怪转义问题,而是 Dropbox 重定向。您,先生,有我的真诚感激之情!!! - Amin Ariana
我现在正在自己尝试做这件事,并尝试使用https://dl.dropbox.com/whatever/my.dump,但仍然出现HTML错误。有什么想法吗? - yburyug
1
最近我又不得不这样做,使用Dropbox的正确格式现在是https://dl.dropboxusercontent.com/s/whatever/my.dump。 - Finnjon

6

Dropbox提供了直接下载文件的解释(https://www.dropbox.com/en/help/201)。这对于在pg_backups中使用dropbox链接非常有用。

简而言之,它建议将下载链接选项设置为“dl=1”,而不是“dl=0”。但是这对我没有起作用。即使复制已下载文件的地址也无法使用。

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


@Stonz2 你好,我是新手。你现在对这个答案有什么看法? - Jojjen
首先,欢迎来到 Stack Overflow!您的回答现在格式化得更好了。如果您对什么是一个好的答案还有其他问题,请参考帮助中心中的“回答”部分。 - Stonz2

0
根据使用PG备份导入和导出Heroku Postgres数据库,您可以在终端上使用以下命令还原转储文件:
$ 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

2
如果您正在本地恢复转储,则此方法可行。原始问题要求在Heroku实例上还原转储。 - Jonathon Horsman

0

遇到了相同的错误,但是原因不同,所以解决方案也不同。也许可以帮助到其他人。

如果你将转储文件存储在使用 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。因此,这不是对该问题的答案,而是对另一个可能尚未被提出的类似问题的答案。如果您愿意,可以自己发布修改后的问题,并自己回答它。 - tomsv
谢谢!她没有明确表示她知道自己在使用https(只是在Dropbox上处理一个转储文件,碰巧使用https),所以她和其他人可能不知道https与“无效的转储格式”有任何关系。错误信息相同,但原因不同。不过你说得对,创建并回答一个新问题来讨论这个是个好主意。 - hwrod

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