我有一个heroku数据库,d76mj7ltuqs
。
然后我有一个本地数据库test_development
。
这两个数据库的模式是相同的 - 我想从生产数据库中提取所有数据并覆盖我的本地数据库,因此本地是拉动时生产的精确复制品。
我怎样才能在Postgres中做到这一点?
答案 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
,然后将psql
或pg_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