Postgres将Heroku生产数据库复制到本地开发数据库

bprjcwpo  于 2022-11-13  发布在  其他
关注(0)|答案(6)|浏览(120)

我有一个Heroku数据库,d76mj7ltuqs
然后我有一个本地数据库test_development
这两个数据库上的模式是相同的-我想从生产数据库中拉取所有数据并覆盖本地数据库,以便本地数据库在拉取时是生产数据库的精确副本。
我怎么能在Postgres中做到这一点?

44u64gxh

44u64gxh1#

使用Heroku的“pg:pull”:
您需要清除本地DB:

rake db:drop

然后从Heroku那里收集一些信息:

heroku pg:pull DATABASE_URL test_development

这将连接到heroku DB,并将其复制到本地数据库。
请参阅pg:pull上的Heroku文档以了解更多详细信息。

woobm2wo

woobm2wo2#

此命令应执行以下操作:

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

bmvo0sr53#

清理本地数据库:

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
kdfy810k

kdfy810k4#

这是我怎么做的,一定要gzip它作为您的数据库增长。也不要导出ACL,因为你可能没有相同的postgres用户对heroku和本地帐户。替换为您的具体细节。

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>
093gszye

093gszye5#

使用您的终端生成一个本地pg_dump,然后将其psqlpg_restore导入您的本地数据库。
类似的方法可以在这里找到。

hgncfbus

hgncfbus6#

如果这是一个Rails应用程序,你可以使用下面的脚本,用你在Heroku上生成的最新转储覆盖你的本地数据库。如果你用heroku pg:backups capture取消注解该行,脚本将在Heroku上生成一个新的快照,然后再下载到你的机器上。
请注意,您不需要编辑脚本,因为它会从数据库.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文档。

相关问题