wake-up-neo.com

Heroku transfer db von einer app zur anderen

Ich muss DB von App_1 zu App_2 übertragen

Ich habe ein Backup auf app_1 erstellt

Dann lief: 

heroku pg: Backups wiederherstellen HEROKU_POSTGRESQL_COLOR --app app_2 heroku pgbackups:url --app app_1

HEROKU_POSTGRESQL_COLOR = Datenbank-URL für app_2

Dann bekomme ich: 

 !    `pg:backups` is not a heroku command.
 !    Perhaps you meant `pgbackups`.
 !    See `heroku help` for a list of available commands.

Also lief ich:

heroku pgbackups: Wiederherstellen HEROKU_POSTGRESQL_COLOR --app app_2 heroku pgbackups:url --app app_1

Dann bekomme ich folgendes: 

!    WARNING: Destructive Action
!    This command will affect the app: app_2
!    To proceed, type "app_2" or re-run this command with --confirm app_2

Also bestätigte ich mit:

> app_2
 !    Please add the pgbackups addon first via:
 !    heroku addons:add pgbackups

Dann lief ich: heroku addons:add pgbackups --app app_2

Adding pgbackups on app_2... failed
 !    Add-on plan not found.

Gibt es einen Ausweg um dieses Problem? Jede Hilfe wäre sehr dankbar! 

* Lösung *

Am Ende habe ich Heroku eine E-Mail geschickt. Sie wiesen darauf hin, dass ich heroku update; heroku plugins:update aber heroku update nur für Heroku-Toolbelt verwenden muss und ich hatte das Juwel installiert. 

Lösung: 

Installieren Sie den Heroku Toolbelt hier

Dann deinstalliere den Edelstein: 

gem uninstall heroku --all

führen Sie das Folgende aus, um die Version abzurufen, und es sollte heroku-toolbelt anstelle des Edelsteins ausgegeben werden. Weitere Informationen hier

$ heroku --version
  heroku-toolbelt/2.39.0 (x86_64-darwin10.8.0) Ruby/1.9.3

So kopieren Sie die Datenbanken über:

heroku pg:backups restore `heroku pgbackups:url --app app_1` HEROKU_POSTGRESQL_COLOR --app app_2

Aber noch besser: Sie können direkt von einer Datenbank in eine andere kopieren, ohne dass eine Sicherung erforderlich ist:

Angenommen, die Datenbank-URL von app_2 lautet: HEROKU_POSTGRESQL_GOLD

heroku pg:copy app_1::DATABASE_URL GOLD -a app_2 

Dadurch wird die Hauptdatenbank von app_1 in die GOLd-Datenbank auf app_2 kopiert

28
neo

es ist nur ein Befehl, um die Datenbank von App zu App zu kopieren. Jetzt müssen Sie kein Backup erstellen:

heroku pg:copy app_name_to_copy_from::database_color_to_copy_from database_color_to_copy_to --app app_name_to_copy_to

überprüfe es hier

71
mohamed-ibrahim

Wenn Sie auf heroku docs schauen, heißt es

PG-Sicherungen als Add-On wurden nicht mehr unterstützt. Die Befehle sind als Teil des Heroku Postgres-Namensraums in der CLI vorhanden. Die neue Funktionalität ist live und verfügbar. 

Sie können also pgbackups functionality directly verwenden, ohne Add-Ons hinzufügen zu müssen

Um ein Backup zu erstellen, können Sie es ausführen

 heroku pg:backups capture --app app_name

wenn Sie haben mehrere Datenbanken, können Sie Datenbank-URL wie folgt angeben

heroku pg:backups capture HEROKU_POSTGRESQL_PINK

Um restore from a backup on another app können Sie ausführen

heroku pg:backups restore b001 DATABASE_URL --app app_name

Sie können transfer database durch

heroku pg: copy DATABASE_URL HEROKU_POSTGRESQL_PINK_URL --app Anwendungsname

Sie können auch upload your database to a public url and then use that url to import database in einer anderen App durch 

heroku pg:backups public-url b001 --app app_name

und dann import durch

heroku pg:backups restore 'https://s3.amazonaws.com/me/items/3H0q/mydb.dump' DATABASE -a app_name

Wenn Sie von einer App zur anderen wechseln und dieselbe Datenbank für eine andere App verwenden möchten, können Sie folgende Schritte ausführen:

  • Melden Sie sich bei Ihrem Heroku-Konto an
  • Wählen Sie Ihre alte App aus und gehen Sie zur Registerkarte Einstellungen 
  • Zeigen Sie die Konfigurationsvariablen für Ihre alte App auf 
  • Kopieren Sie DATABASE_URL
  • Gehen Sie zurück und wählen Sie Ihre neue App aus
  • Ersetzen Sie neue Apps DATABASE_URL durch den alten Apps-Wert
10
Mandeep
heroku pg:copy app1_name::HEROKU_POSTGRESQL_ONYX_URL HEROKU_POSTGRESQL_AQUA_URL --app app2_name

Wo sich die zweite Datenbank-URL in app2_name befindet

2
pixelearth

Ich habe die einfachere Lösung gefunden, um dieselbe Ressource (in diesem Fall die Postgres-Datenbank - oder eine andere, die das Teilen/Wiederverwenden zulässt) mit mehreren Anwendungen auf Heroku wiederzuverwenden/gemeinsam zu nutzen:

  1. Wechseln Sie zum älteren App-Dashboard (Quelle) von Heroku
  2. Wählen Sie die Registerkarte "Ressourcen"
  3. Lokalisieren Sie die Ressource (Postgres-Datenbank, in unserem Fall hier).
  4. Klicken Sie auf das Symbol neben dem Plannamen ganz rechts in der Zeile mit der Ressource
  5. Wählen Sie die Option "An andere App anhängen" und wählen Sie den neueren (Ziel-) App-Namen aus der angezeigten Liste aus

Beispiel für das erweiterte Menü bei Schritt 4 oben erwähnt!

Das genügt, um die Ressource für die Apps freizugeben, da alle zugehörigen Konfigurationseinstellungen der Ziel-App automatisch aktualisiert werden. Dies ist praktisch, da keine der Konfigurationsvariablen, die sich auf Add-Ons beziehen, zumindest vom Dashboard aus direkt bearbeitet werden kann (nicht über die CLI geprüft). Ich hoffe, das hilft jedem, der etwas Ähnliches sucht.

1
Narayanan R

Gemäß der Website wird das Addon abgeschrieben. Das könnte also der Grund für die Fehlermeldung sein.

Sicherungen als Add-On wurden nicht mehr unterstützt.

Da Ihr Ziel darin besteht, die Datenbank von einer App zur anderen zu verschieben, versuchen Sie es nicht mit den Anweisungen, die im Link unten aufgeführt sind.

https://devcenter.heroku.com/articles/heroku-postgres-backups#direct-database-to-database-copies

1
coderhs

Es gibt einfache Möglichkeiten, dies zu tun, und es gibt eine schnelle Möglichkeit, dies zu tun

Die einfachen Methoden umfassen im Allgemeinen die Verwendung einer Sicherungs-/Wiederherstellungsmethode (einschließlich pg:copy, bei dem es sich um eine Sicherung handelt, die die Daten direkt an ein pg_restore process), aber diese sind beim Erstellen der neuen Datenbank langsam, da Sie eine logische Definition von Tabellen wiederherstellen, die Daten laden und Indizes für die Daten erstellen.

Das ist eine Menge Arbeit und für meine 30 GB Standard-2-Datenbanken kann es buchstäblich Stunden dauern.

Die schnellste Möglichkeit besteht darin, einen Follower der zu kopierenden Datenbank (z. B. Produktion) für die Anwendung bereitzustellen, in der die Daten gespeichert werden sollen (z. B. Test). Bei denselben 30-GB-Datenbanken, für deren Wiederherstellung Stunden erforderlich sind, dauerte dies ungefähr 15 Minuten.

Die Methode, die ich benutze, ist:

# Get the name of the source database addon (e.g. postgresql-clean-12345)
heroku pg:info -a production-app

# Create a follower on the destination app (choose your own plan)
# You create the follower on the new app because otherwise it is 
# perpetually associated with the source as it's "billing app"
heroku addons:create heroku-postgresql:standard-2 --follow postgresql-clean-12345 -a test-app
heroku pg:wait -a test-app

# Quiesce the destination app
heroku scale web=0 worker=0 -a test-app
heroku maintenance:on -a test-app

# Get the colour of the new database (e.g. HEROKU_POSTGRESQL_GRAY_URL)
heroku pg:info -a test-app

# Unfollow the source database.
# If you want to upgrade the database, do that now instead of the
# unfollow.
heroku pg:unfollow HEROKU_POSTGRESQL_GRAY_URL -a test-app

# Promote the new database on the destination app
heroku pg:promote HEROKU_POSTGRESQL_GRAY_URL -a test-app

# Get the colour of the old database, if any(e.g. HEROKU_POSTGRESQL_MAROON_URL)
heroku pg:info -a test-app

# Destroy the old database (if any)
heroku addons:destroy HEROKU_POSTGRESQL_MAROON_URL -a test-app

# Bring the test app back up
heroku scale web=1 worker=1 -a test-app
heroku maintenance:off -a test-app

Warum ist das schneller?

Ich glaube, dass Heroku beim Erstellen eines Followers die neue Datenbank erstellt, indem er entweder Datendateien kopiert oder von einer physischen (Datei-) Sicherung wiederherstellt und dann die Protokolle erneut abspielt, um sie auf den neuesten Stand zu bringen.

0
David Aldridge

Ich hatte ein verwandtes Problem. Sie können ein Backup auf Ihrem lokalen Computer speichern und dann auf ein bestimmtes Hosting hochladen, z. B. Amazon S3, und von der angegebenen URL importieren .. Diese Frage und die folgende Antwort kann Ihnen dabei helfen: Kann nicht in die heroku postgres Datenbank importiert werden dump

0
Danny Ocean

Sie finden möglicherweise das nützliche Programm pgAdmin III ( http://pgadmin.org/ ), ein kostenloses Datenbankmanagement-Tool, das speziell für diese Aufgaben entwickelt wurde. Sie können Ihre Heroku-Datenbank direkt bearbeiten/anzeigen/importieren/exportieren. Lassen Sie mich wissen, wenn Sie beim Setup Hilfe benötigen. (Es ist wie MySQL Workbench, aber für PostgreSQL). 

0
Elvn