web-dev-qa-db-fra.com

Postgres copie Heroku Production DB vers la base de développement locale

J'ai une base de données heroku, d76mj7ltuqs.

J'ai alors une base de données locale, test_development.

Le schéma est identique sur ces deux bases de données. Je souhaite extraire toutes les données de ma base de données de production et écraser ma base de données locale afin que local soit une réplique exacte de la production au moment de l'extraction.

Comment puis-je faire cela dans Postgres?

31
Luigi

Utilisez "pg: pull" de heroku:

Vous devrez effacer votre base de données locale:

rake db:drop

Le recueille quelques informations de Heroku:

heroku pg:pull DATABASE_URL test_development

Cela permettra de se connecter à la base de données heroku et de le copier dans la base de données locale.

Voir la documentation de Heroku à la page: pull pour plus de détails.

64
JezC

nettoyer votre base de données locale:

rake db:schema:load

vider votre base de données heroku:

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

charger des données dans votre base de données locale

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

voici comment je le fais, assurez-vous de le gziper au fur et à mesure que votre base de données se développe. De plus, n'exportez pas la liste de contrôle d'accès car vous n'avez probablement pas le même utilisateur postgres sur les comptes heroku et locaux. remplacez par vos détails spécifiques.

 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
blotto

Utilisez votre terminal pour créer un pg_dump local puis un psql ou un pg_restore dans votre base de données locale.

Une méthode similaire peut être trouvée ici .

1
Alex

S'il s'agit d'une application Rails, vous pouvez utiliser le script suivant pour écraser votre base de données locale avec le dernier vidage que vous avez généré sur Heroku. Si vous décommentez la ligne avec heroku pg:backups capture, le script générera un nouvel instantané sur Heroku avant de le télécharger sur votre ordinateur.

Notez que vous ne devriez pas avoir à éditer le script, car il lit toute la configuration à partir de votre fichier 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}`

Voir la documentation Heroku sur le téléchargement des sauvegardes de base de données pour plus de détails.

0
rick