wake-up-neo.net

Postgres kopiert Heroku Production DB in die lokale Entwicklungs-DB

Ich habe eine Heroku-Datenbank, d76mj7ltuqs.

Ich habe dann eine lokale Datenbank, test_development.

Das Schema ist in beiden Datenbanken dasselbe. Ich möchte alle Daten aus meiner Produktionsdatenbank ziehen und meine lokale Datenbank überschreiben, sodass "local" zum Zeitpunkt des Pull-Vorgangs eine exakte Kopie der Produktion ist.

Wie kann ich das in Postgres machen?

31
Luigi

Verwenden Sie Herokus "pg: pull":

Sie müssen Ihre lokale Datenbank löschen:

rake db:drop

Die Informationen von Heroku sammeln:

heroku pg:pull DATABASE_URL test_development

Dadurch wird eine Verbindung zur Heroku-Datenbank hergestellt und in die lokale Datenbank kopiert.

Siehe Herokus Dokumentation auf pg: pull für weitere Details.

64
JezC

bereinigen Sie Ihre lokale Datenbank:

rake db:schema:load

dump deine Heroku-Datenbank:

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

laden Sie Daten in Ihre lokale Datenbank

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

so mache ich es, stellen Sie sicher, dass es gzip ist, wenn Ihre Datenbank wächst. Exportieren Sie auch nicht die ACL, da Sie wahrscheinlich nicht die gleichen Postgres-Benutzer auf Heroku- und lokalen Konten haben. ersetzen Sie mit Ihren 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>
3
blotto

Verwenden Sie Ihr Terminal, um einen lokalen pg_dump und dann entweder psql oder pg_restore in Ihre lokale Datenbank einzufügen.

Eine ähnliche Methode kann hier gefunden werden.

1
Alex

Wenn dies eine Rails-App ist, können Sie das folgende Skript verwenden, um Ihre lokale Datenbank mit dem neuesten Speicherauszug zu überschreiben, den Sie in Heroku erstellt haben. Wenn Sie die Zeile nicht mit heroku pg:backups capture kommentieren, generiert das Skript einen neuen Snapshot auf Heroku, bevor Sie ihn auf Ihren Computer herunterladen.

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}`

Weitere Informationen finden Sie in den Heroku-Dokumenten zum Herunterladen von DB-Sicherungen .

0
rick

Dieser Befehl sollte die Arbeit erledigen:

heroku pg:pull DATABASE_URL database-name --app heroku-app-name
0
Ishan Patel