使用 "heroku pg:backups:restore" 导入到 Heroku Postgres

5

我正在尝试按照这篇文章的说明将一个本地的 PostgreSQL 数据库复制到 Heroku。

以下是我的操作步骤:

1. 创建一个转储文件

pg_dump -Fc --no-acl --no-owner -h localhost -U postgres mydb > mydb.dump

2.将转储文件上传到 AWS 的 my-bucket-name/db-backup 文件夹中。

aws s3 cp mydb.dump s3://my-bucket-name/db-backup/mydb.dump

3.生成签名URL:

aws s3 presign s3://my-bucket-name/db-backup/mydb.dump --region us-east-2

4. 验证签名URL是否可访问。

在浏览器的无痕标签中导航到预签名URL,确保它可以正常访问。

5. 使用生成的签名URL备份到Heroku

我在GENERATED_URL周围使用双引号,因为我使用Windows操作系统:

heroku pg:backups:restore --app my-app-name --confirm my-app-name "GENERATED_URL"

例如:
heroku pg:backups:restore --app my-app-name --confirm my-app-name "https://s3.us-east-2.amazonaws.com/s3.console.aws.amazon.com/s3/buckets/my-bucket-name/db-backup/mydb.dump?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIABCDVKE2GXCY3YXL7V%2F20200934%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Date=20200924T164718Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=fb2f51c0d7fbe1234e3740cf23c37f003575d968a1e4961684a47ac627fbae2e"

结果

我遇到以下错误:

Restoring... !
 !    An error occurred and the backup did not finish.
 !
 !    Could not initialize transfer
 !
 !    Run heroku pg:backups:info r021 for more details.
'X-Amz-Credential' is not recognized as an internal or external command,
operable program or batch file.
'X-Amz-Date' is not recognized as an internal or external command,
operable program or batch file.
'X-Amz-Expires' is not recognized as an internal or external command,
operable program or batch file.
'X-Amz-SignedHeaders' is not recognized as an internal or external command,
operable program or batch file.
'X-Amz-Signature' is not recognized as an internal or external command,
operable program or batch file.

我发现有其他人遇到了类似的问题,但是没有解决方案。在此提前感谢任何能够提供帮助的人。

2个回答

5

问题已解决。原因有两个:

  1. PowerShell无法正确转义字符,所以我改用CMD。
  2. 转储文件无效。

这行代码生成了一个无效的转储文件:

pg_dump -Fc --no-acl --no-owner -h localhost -U postgres mydb > mydb.dump

相反,我需要使用以下语法:

pg_dump -Fc --no-acl --no-owner -h localhost -U postgres -d mydb -f mydb.dump

更改后,一切都正常工作了。


我假设 > 会产生非压缩格式? - alias51
它能与Heroku仪表板生成的备份一起使用吗? - SalahAdDin

2

就我个人而言,我遇到了相同的问题,我的解决方案是复制S3网址,格式为https://s3.amazonaws.com/<bucket_name>/<dump_file>.dump。由于某种原因,预签名URL方法无法正常工作,但公共URL可以。


1
破坏了预签名URL的意义... - alias51
我刚刚使用了S3 URL(在将其设置为公共之后),它可以正常工作。我无法让预签名URL正常工作。 - Paul Maurer

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