Wie kann ich eine PostgreSQL-Datenbank aus einer .tar-Datei wiederherstellen?

20

Ich habe alle PostgreSQL-Datenbanken während inkrementeller Sicherungen mit WHM gesichert, wodurch ein $ dbName erstellt wird. TAR- Datei.

Daten werden in diesen .tar-Dateien gespeichert, aber ich weiß nicht, wie ich sie über SSH in die einzelnen Datenbanken zurückspeichern kann. Insbesondere der Dateispeicherort.

Ich habe verwendet:

pg_restore -d client03 /backup/cpbackup/daily/client03/psql/client03.tar

die den Fehler generiert "Eingabedatei konnte nicht geöffnet werden: Berechtigung verweigert"

Jede Hilfe dankbar.

Stephen
quelle
Hat der Benutzer, mit dem Sie diesen Befehl ausführen, Zugriff auf diese Datei?
Mat
Hallo Mat, du denkst schon (läuft als root), hast aber gerade das Problem nach vielen, vielen Kombinationen gelöst und die rohe .tar-Datei nach tmp verschoben .... pg_restore -c -i -U postgres -d client03 -v "/tmp/client03.tar" -W Das -W am Ende war der Haupttrick, der die erforderliche Passworteingabe erzwang, wodurch alles wieder zusammengesetzt werden konnte.
Stephen

Antworten:

24

Habe die richtige Code-Zeichenfolge gefunden, falls jemand anderes diesen Thread findet.

pg_restore -c -i -U postgres -d client03 -v "/tmp/client03.tar" -W

Die Aufschlüsselung war von http://www.postgresql.org/docs/7.3/static/app-pgrestore.html und ein bisschen Versuch und Irrtum.

Im Wesentlichen...

-c to clean the database
-i to ignore any database version checks
-U to force a user
-d to select the database
-v verbose mode, don't know why
"$$" the location of the files to import in tmp to get around permission issues
-W to force asking for the password to the user (postgres)

Hoffe, dass das oben genannte jemand anderem hilft.

Stephen
quelle
Wie geht das mit tar.gz?
Eri
2

Bei Verwendung von PgAdmin III für die Wiederherstellung funktionierte es einwandfrei, indem der folgende Befehl verwendet wurde, den es selbst erstellte:

pg_restore --host localhost --port 5432 --username "my_user_name" --dbname "my_db_name" --role "my_user_name" --no-password  --verbose "/Users/me/Desktop/backup_file.tar"

Um Warnungen zu vermeiden, ist es ratsam, die Rolle des Besitzers von Objekten in der Sicherungsdatei zu übernehmen, die bereits auf dem Zielserver vorhanden ist. Außerdem sollte die Ziel-DB bereits erstellt sein und dieser Rolle gehören.

MikeM
quelle
1

Ich bin nicht sicher, ob eine .tar-Datei importiert werden kann. Ich würde ein tun

tar -zxvf client03.tar 

um zu extrahieren, was sich in der Datei befand, und pg_restore erneut zu versuchen. Ich weiß, dass pg_restore funktioniert, da wir dieselbe Wiederherstellungsmethode wie bei Bare-Metal-Wiederherstellungen verwenden.

Stephen Thompson
quelle
1
Hallo Stephen, anscheinend kann ich das. Ich habe nur eine Weile gebraucht, um den richtigen Code zu finden und die Datei in einen Ordner zu verschieben, auf den zugegriffen werden darf :)
Stephen
Das "-z" würde einen Fehler zurückgeben, da es nur ein Teer ist, der nicht mit gzip komprimiert wurde.
Alex
Alex ist zu 100% korrekt.
Stephen Thompson
0

Das Folgende wurde für mich aus pgAdmin iii generiert, indem Sie auf die Datenbank klicken und mit der rechten Maustaste klicken und "Wiederherstellen" auswählen. Ich habe zu der .tar-Datei navigiert, die ich hatte, und sie hat es alleine gemacht.

/usr/bin/pg_restore --host localhost --port 5434 --username "postgres" \
--dbname "dvdrental" --no-password  --schema public --verbose \
"/home/npena/Desktop/dvd/dvdrental.tar"
Nathan Pena
quelle
0

Führen Sie für Version 9.5 in der Befehlszeile Folgendes aus

pg_restore -W -c -U [username] -d [database_name] -v "[path to extracted tar]"

nnamdi
quelle
0

GNU / LINUX-KONSOLE:

pg_restore -h 127.0.0.1 -p 5432 -U "postgres" -d "dvdrental_tpl" -v "/var/backups/dvdrental.tar";

- Detailhilfe

pg_restore --help

Taner Bigdataoğlu
quelle