Rails 4: 你如何 运行 从 Heroku 下载一个 Postgres 数据库到我的本地机器上?

Rails 4: How do you run a Postgres database downloaded from Heroku on my local machine?

我从 Heroku 下载了一个 pg 备份(它以 TextEdit 文档的形式出现),我想 运行 从我的开发环境中对其进行测试。我如何转换 it/save 它以便我可以更改我的 database.yml 文件来访问它?

你应该看看来自 Heroku 的 Importing and Exporting Heroku Postgres Databases with PG Backups 文章。

下载PG备份:

$ heroku pg:backups capture
$ curl -o latest.dump `heroku pg:backups public-url`

并恢复到本地数据库:

$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump
$ heroku pg:backups capture -a app_name

这将在您的屏幕上回显

curl -oUse Ctrl-C at any time to stop monitoring progress; the backup
will continue running. Use heroku pg:backups info to check progress.
Stop a running backup with heroku pg:backups cancel.
DATABASE ---backup---> b001
Backup completed

然后您需要使用 curl

下载转储
$ curl -o latest.dump `heroku pg:backups public-url -a app_name`

然后在 PG 中创建一个数据库并将转储导入该数据库

$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U [username] -d [database name] latest.dump

例子

$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U john -d new_dump_database_name latest.dump
$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U john -d production-dump prod

现在配置 Rails 的 Database.yml

development:
  <<: *default
  #  database: rails-app_development
  database: new_dump_database_name

见面heroku pg:pull.

没有拉动 username/password

您可以通过 运行:

在本地拉取 Heroku PostgreSQL 数据库

heroku pg:pull $HEROKU_DATABASE $LOCAL_DATABASE [--app $APP]

其中 $HEROKU_DATABASE 是 Heroku 数据库的名称,$LOCAL_DATABASE 是您本地数据库的名称(它将由 pg:pull 创建;如果它已经存在,以保护您免受意外覆盖),$APP 是您的应用程序名称。

用username/password

拉动

如果您需要为本地 PostgreSQL 连接提供 username/password,那么您可以像这样通过 PGUSERPGPASSWORD 传递它:

PGUSER=$YOUR_USER PGPASSWORD=$YOUR_PASSWORD heroku pg:pull $HEROKU_DATABASE $LOCAL_DATABASE [--app $APP]

为什么不备份?

捕获单独的备份只是为了获取最近的生产数据可能不是最好的主意,因为 Heroku 会轮换备份,所以您会丢失一个较旧的备份。这是否是一个问题取决于您的情况。