it-swarm.com.de

pg_restore in eine neue Datenbank

Ich verwende die Postgres-Option von Heroku und habe ein Backup, das ich heruntergeladen habe. Ich möchte es in einer neuen Datenbank wiederherstellen, damit ich es mir ansehen kann. Ich habe verschiedene Befehle ohne Erfolg ausprobiert. Mein erster Versuch:

$ Sudo -u postgres psql < db/backups/myapp_2018-05-27.pg.dump 
The input is a PostgreSQL custom-format dump.
Use the pg_restore command-line client to restore this dump to a database.

Also versuche ich:

$ Sudo -u postgres pg_restore -d myapp3 -C db/backups/myapp_2018-05-27.pg.dump
pg_restore: [archiver (db)] connection to database "myapp3" failed: FATAL:  database "myapp3" does not exist

Ich verstehe nicht wirklich das -C Option .

-C - erstellen

Erstellen Sie die Datenbank, bevor Sie sie wiederherstellen. Wenn auch --clean angegeben ist, löschen Sie die Zieldatenbank und erstellen Sie sie neu, bevor Sie eine Verbindung herstellen.

Wenn diese Option verwendet wird, wird die mit -d benannte Datenbank nur verwendet, um die anfänglichen Befehle DROP DATABASE und CREATE DATABASE auszugeben. Alle Daten werden in dem Datenbanknamen wiederhergestellt, der im Archiv angezeigt wird.

Es erscheint mir logisch, in der neuen Datenbank wiederherzustellen. Ich schweife ab… (und vielleicht wird das richtig erklärt hier )

Ich habe versucht, eine neue Datenbank aus der Vorlage einer anderen, früheren Datenbank mit demselben Schema zu erstellen:

$ Sudo -u postgres createdb -T myapp myapp3

$ Sudo -u postgres pg_restore -d myapp3 -C db/backups/myapp_2018-05-27.pg.dump
pg_restore: [archiver (db)] Error while PROCESSING TOC:

<snip>

WARNING: errors ignored on restore: 5

Ich erhalte viele Fehler über einen Benutzer, der nicht existiert und keine Daten eingefügt hat.

Ich habe auch versucht, template0 aber das bringt Fehler über das Schema, wie ich erwarten würde.

Zusammenfassend möchte ich von einem Heroku Pg-Backup in eine neue Datenbank wiederherstellen. Ich weiß nicht, wie ich Fehler in Bezug auf Indizes und fehlende Benutzer usw. vermeiden kann. und halten das Schema bereit.

Ich habe auch versucht -O wegen dieser Zeile in den Dokumenten:

Mit -O kann ein beliebiger Benutzername für die anfängliche Verbindung verwendet werden, und dieser Benutzer besitzt alle erstellten Objekte.

Ich habe das anscheinend auch falsch verstanden, weil der Bildschirm wieder voller Fehler war.


Bearbeiten: Basierend auf dem -C verknüpfte Antwort Ich habe es geschafft, in einer kryptisch benannten Datenbank wiederherzustellen, aber als ich den Befehl zum Umbenennen der Datenbank ausführte (alter database rtyghjkuyhgh rename to my_app3) es leert alle Daten :(


Jede Hilfe oder Einsicht, auch nur ein Punkt in die richtige Richtung, wäre sehr dankbar.

Postgres Version 9.5.12

2
iain

Also die Antwort:

  1. Erstellen Sie eine neue Datenbank.

Sudo -u postgres createdb -T myapp myapp5

  1. Stellen Sie eine Verbindung zu einer anderen Datenbank her und führen Sie diesen Befehl aus.

Sudo -u postgres pg_restore -d some_other_db -C -O db/backups/myapp_2018-05-27.pg.dump

  1. Ändern Sie den Namen der Datenbank von dem Namen in den oben erstellten.

$ psql \c some_other_db alter database ghji76yhjkj rename to myapp5

  1. Führen Sie alle Skripte aus, die zum Einrichten von Benutzern und dergleichen erforderlich sind.
0
iain

1) Wechseln Sie zuerst zum Superuser su - postgres

2) dann eine neue Datenbank erstellt createdb myapp3 --DROP ist bereits erstellt

3) Ändern Sie nun den Director in den Sicherungsdateipfad, d. H. cd db/backups/

4) Führen Sie dies jetzt einfach aus, um Ihre benutzerdefinierte Dump-Datei wiederherzustellen

pg_restore -j 8 -U postgres -d myapp3 myapp_2018-05-27.pg.dump

5) Wenn die Datenbank immer noch nicht wiederhergestellt werden kann, nehmen Sie bitte ein neues bkup mit

pg_dump -U postgres -Fc myapp3 > myapp_2018-05-27.dump

entfernen Sie .pg und versuchen Sie erneut, es wiederherzustellen.

1
Ashiq Ahamed

Definieren wir einige Variablen, um das Kopieren/Einfügen des Restes zu vereinfachen (unter Verwendung von Namen aus der ursprünglichen Frage).

old_db=myapp
new_db=myapp3
db_dump_file="backups/myapp_2018-05-27.pg.dump"

Im Folgenden wird davon ausgegangen, dass Ihr Backup mit dem folgenden "benutzerdefinierten" Format erstellt wurde:

pg_dump -U postgres -F custom "$old_db" > "$db_dump_file"

Etwas wiederherstellen $db_dump_file zu einem neuen Datenbanknamen $new_db:

dropdb   -U postgres --if-exists  "$new_db"
createdb -U postgres -T template0 "$new_db"

pg_restore -U postgres -d "$new_db" "$db_dump_file"
1
mivk