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?
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.
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
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>
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.
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 .
Dieser Befehl sollte die Arbeit erledigen:
heroku pg:pull DATABASE_URL database-name --app heroku-app-name