Jak przywrócić bazę danych PostgreSQL z pliku .tar?

20

Mam kopie zapasowe wszystkich baz danych PostgreSQL podczas przyrostowych kopii zapasowych przy użyciu WHM, który tworzy $ dbName. plik tar .

Dane są przechowywane w tych plikach .tar, ale nie wiem, jak przywrócić je z powrotem do poszczególnych baz danych za pośrednictwem SSH. W szczególności lokalizacja pliku.

Korzystałem z:

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

co powoduje błąd „nie można otworzyć pliku wejściowego: odmowa uprawnień”

Każda pomoc doceniona.

Stephen
źródło
Czy użytkownik, z którym uruchomiono to polecenie, ma dostęp do tego pliku?
mat
Cześć Mat, tak byś pomyślał (działający jako root), ale właśnie rozwiązałeś problem po wielu wielu kombinacjach i przeniesienie surowego pliku .tar do tmp .... pg_restore -c -i -U postgres -d client03 -v „/tmp/client03.tar” -W Na końcu -W była główna sztuczka, która wymusiła wprowadzenie hasła zgodnie z wymaganiami, co umożliwiło ponowne złożenie wszystkiego.
Stephen

Odpowiedzi:

24

Znaleziono prawidłowy ciąg kodu, na wypadek, gdyby ktoś znalazł ten wątek.

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

Podział był z http://www.postgresql.org/docs/7.3/static/app-pgrestore.html i trochę prób i błędów.

Głównie...

-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)

Mam nadzieję, że powyższe pomaga komuś innemu.

Stephen
źródło
jak to zrobić z tar.gz?
eri
2

Gdy używałem PgAdmin III do przywracania dla mnie, działał bezbłędnie, używając następującego skonstruowanego przez siebie polecenia:

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"

Uwaga: aby uniknąć ostrzeżeń, dobrze jest mieć rolę właściciela obiektów w pliku kopii zapasowej, który już istnieje na serwerze docelowym. Powinieneś także mieć docelową bazę danych utworzoną i posiadaną przez tę rolę.

MikeM
źródło
1

Nie jestem pewien, czy można zaimportować plik .tar. Zrobiłbym

tar -zxvf client03.tar 

aby wyodrębnić wszystko, co było w pliku, i spróbuj ponownie pg_restore. Wiem, że pg_restore działa, ponieważ mamy tę samą metodę przywracania z przywracania od zera.

Stephen Thompson
źródło
1
Cześć Stephen, tak, najwyraźniej może, zajęło mi to trochę czasu, aby uzyskać poprawny kod i upuścić plik do folderu z pozwoleniem na dostęp :)
Stephen
„-Z” zwróci błąd, ponieważ jest to tylko tar, nieskompresowany gzip.
Alex
Alex ma 100% racji.
Stephen Thompson
0

Poniżej wygenerowano dla mnie z pgAdmin iii, klikając bazę danych i klikając prawym przyciskiem myszy i wybierając przywróć. Nawigowałem do pliku .tar, który miałem i zrobił to sam.

/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
źródło
0

W przypadku wersji 9.5 uruchom następujące polecenie w wierszu polecenia

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

nnamdi
źródło
0

KONSOLA GNU / LINUX:

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

- Szczegółowa pomoc

pg_restore --help

Taner Bigdataoğlu
źródło