将Heroku生产数据库复制到本地开发数据库的Postgres copy方法

45
我有一个Heroku数据库,d76mj7ltuqs
然后我有一个本地数据库,test_development
这两个数据库的模式相同 - 我要从生产数据库中提取所有数据并覆盖我的本地数据库,以便在拉取时本地成为生产的精确副本。
如何在Postgres中实现?

也许用pg_dumppg_restore会比较合适? - Ihor Romanchenko
6个回答

82

使用Heroku的"pg:pull"命令:

你需要清除你本地的数据库:

rake db:drop

然后从Heroku收集一些信息:

heroku pg:pull DATABASE_URL test_development

这将连接到Heroku数据库,并将其复制到本地数据库。

有关更多详细信息,请参见Heroku关于pg:pull的文档


3
不确定这是否是新规定,但在定义应用程序时,需要在应用程序名称之前加上“--app”。 - jdpipkin
3
我也需要:heroku pg:pull DATABASE_URL database_local_name --app myapp - J0ANMM
3
起初,我认为我需要将 DATABASE_URL 替换为我的 Heroku 配置相应的值,但事实并非如此。 - V-SHY

11

这个命令应该可以完成工作:

heroku pg:pull DATABASE_URL database-name --app heroku-app-name

很惊讶这个没有得到更多的支持。 - LunaCodeGirl

7

清空本地数据库:

rake db:schema:load

转储您的Heroku数据库:

heroku pg:backups:capture -r <**your production git repo name**>
heroku pg:backups:download -r <**your production git repo name**>

将数据加载到您的本地数据库中

pg_restore --verbose --clean --no-acl --no-owner -h localhost -d <**test database name**> latest.dump

3

这是我的做法,请务必在数据库增长时对其进行gzip压缩。同时不要导出ACL,因为你在Heroku和本地帐户上可能没有相同的Postgres用户。请用你自己的详细信息替换<placeholder>。

 pg_dump -h ec2-##-##-##-##.compute-1.amazonaws.com -p <port> -Fc --no-acl --no-owner -o -U <username> <databasename> | gzip > dumpfile.gz
 #<Prompt for Password>
 gunzip -c dumpfile.gz | pg_restore --verbose --clean --no-acl --no-owner -d test_development -U <local_username>

2
pg_dump 可以在不使用外部 gzip 的情况下压缩转储。请查看 --compress=0..9 选项。 - Ihor Romanchenko

1
使用终端制作本地pg_dump,然后将其psqlpg_restore到本地数据库中。保留HTML标签。
类似的方法可以在此处找到。

0
如果这是一个Rails应用程序,您可以使用以下脚本将本地数据库覆盖为您在Heroku上生成的最新转储。如果您取消注释带有heroku pg:backups capture的行,则脚本将在下载到您的计算机之前在Heroku上生成新的快照。
请注意,您不应该编辑脚本,因为它从您的database.yml文件中读取所有配置。
#!/usr/bin/env ruby

require_relative '../config/environment'

# Uncomment the line below if you want to generate a new snapshot of the
# Heroku production database before downloading it to the local machine
# `heroku pg:backups capture`

database_dump_file_pathname = Tempfile.new('latest.dump').path
`heroku pg:backups:download --output #{database_dump_file_pathname}`

# Get database config fom database.yml file
database_config = YAML::load_file(Rails.root.join('config', 'database.yml'))
database_name = database_config['development']['database']
database_username = database_config['development']['username']
database_password = database_config['development']['password']

# Overwrite local database with dump
cmd_line_arguments = [
  '--verbose',
  '--clean',
  '--no-acl',
  '--no-owner',
  '--host localhost',
  "-U #{database_username}",
  "-d #{database_name}",
  database_dump_file_pathname
].join(' ')
`PGPASSWORD=#{database_password} pg_restore #{cmd_line_arguments}`

请参阅Heroku文档有关下载数据库备份的详细信息


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