2014-04-15 16 views
24

Ich habe eine Heroku-Datenbank, d76mj7ltuqs. Ich habe dann eine lokale Datenbank, test_development.Postgres kopieren Heroku Production DB zu lokaler Entwicklung DB

Das Schema ist in beiden Datenbanken identisch - ich möchte alle Daten aus meiner Produktionsdatenbank abrufen und meine lokale Datenbank überschreiben, so dass local eine exakte Replik der Produktion zum Zeitpunkt des Ziehens ist.

Wie kann ich das in Postgres?

+0

Vielleicht [ 'pg_dump'] (http:// www.postgresql.org/docs/current/static/app-pgdump.html) und ['pg_restore'] (http://www.postgresql.org/docs/current/static/app-pgrestore.html)? –

Antwort

1

Verwenden Sie Ihr Terminal, um eine lokale pg_dump und dann entweder psql oder pg_restore in Ihre lokale Datenbank zu machen.

Ähnliche Methode kann here gefunden werden.

3

Dies ist, wie ich es mache, sicher sein, gzip es als Ihre Datenbank wächst. Exportieren Sie auch nicht die ACL, da Sie wahrscheinlich nicht den gleichen postgres-Benutzer auf heroku und lokalen Konten haben. Ersetzen Sie durch Ihre spezifischen Details.

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

Der 'pg_dump' kann den Dump ohne externes' gzip' komprimieren. Sehen Sie sich die Option --compress = 0..9 an. –

46

Verwenden Heroku des "pg: pull":

Sie benötigen Ihre lokale DB löschen:

rake db:drop 

Die einige Informationen von Heroku sammeln:

heroku pg:pull DATABASE_URL test_development 

Dies stellt eine Verbindung zur Datenbank heroku her und kopiert sie in die lokale Datenbank.

Weitere Details finden Sie unter Heroku's documentation on pg:pull.

+2

Nicht sicher, ob dies jetzt eine neue Sache ist, aber wenn Sie eine App definieren, müssen Sie 'app' vor dem App-Namen eingeben. – jdpipkin

+0

Das gleiche hier. Ich brauche: 'heroku pg: ziehe DATABASE_URL database_local_name --app myapp' – J0ANMM

0

Wenn es sich um eine Rails-App handelt, können Sie mit dem folgenden Skript Ihre lokale Datenbank mit dem neuesten Dump überschreiben, den Sie auf Heroku erstellt haben. Wenn Sie die Zeile mit heroku pg:backups capture auskommentieren, generiert das Skript vor dem Herunterladen auf Ihrem Computer einen neuen Snapshot auf Heroku.

Beachten Sie, dass Sie das Skript nicht bearbeiten müssen, da es die gesamte Konfiguration aus Ihrer Datei "database.yml" liest.

#!/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}` 

Siehe die Heroku docs on downloading DB backups für Details.

1

reinigen Ihre lokale Datenbank:

rake db:schema:load 

Dump Ihre Heroku Datenbank:

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

Ladedaten in der lokalen Datenbank

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