Postgres将Heroku Production DB复制到本地开发DB

时间:2014-04-15 15:40:33

标签: database postgresql heroku

我有一个heroku数据库,d76mj7ltuqs

然后我有一个本地数据库test_development

这两个数据库的模式是相同的 - 我想从生产数据库中提取所有数据并覆盖我的本地数据库,因此本地是拉动时生产的精确复制品。

我怎样才能在Postgres中做到这一点?

6 个答案:

答案 0 :(得分:67)

使用heroku的“pg:pull”:

您需要清除本地数据库:

rake db:drop

收集Heroku的一些信息:

heroku pg:pull DATABASE_URL test_development

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

有关详细信息,请参阅Heroku's documentation on pg:pull

答案 1 :(得分:4)

清理本地数据库:

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

答案 2 :(得分:3)

这就是我的工作方式,请确保在数据库增长时对其进行gzip。也不要导出ACL,因为你可能没有在heroku和本地帐户上拥有相同的postgres用户。替换为您的具体细节。

 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>

答案 3 :(得分:1)

使用您的终端制作本地pg_dump,然后将psqlpg_restore制作到本地数据库。

可以找到类似的方法here

答案 4 :(得分: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 docs on downloading DB backups

答案 5 :(得分:0)

此命令应完成工作:

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