plik wejściowy wydaje się być zrzutem formatu tekstowego. Użyj psql


90

Kopię zapasową wykonuję za pomocą

pg_dump db_production > postgres_db.dump

a następnie kopiuję go do localhost przy użyciu scp.

Teraz, kiedy importuję do mojej lokalnej bazy danych, wyświetla się błąd

pg_restore: [archiver] input file appears to be a text format dump. Please use psql.

używając wiersza poleceń

pg_restore -d db_development postgres_db.dump

Odpowiedzi:


133

Z pg_dumpdokumentacji:

Przykłady

Aby zrzucić bazę danych o nazwie mydb do pliku skryptu SQL :

$ pg_dump mydb > db.sql

Aby przeładować taki skrypt do (świeżo utworzonej) bazy danych o nazwie newdb :

$ psql -d newdb -f db.sql

Aby zrzucić bazę danych do pliku archiwum o niestandardowym formacie:

$ pg_dump -Fc mydb > db.dump

Aby zrzucić bazę danych do archiwum w formacie katalogowym:

$ pg_dump -Fd mydb -f dumpdir

Aby przeładować plik archiwum do (świeżo utworzonej) bazy danych o nazwie newdb:

$ pg_restore -d newdb db.dump

Z pg_restoredokumentacji:

Przykłady

Załóżmy, że zrzuciliśmy bazę danych o nazwie mydb do pliku zrzutu w niestandardowym formacie:

$ pg_dump -Fc mydb > db.dump

Aby usunąć bazę danych i odtworzyć ją ze zrzutu:

$ dropdb mydb
$ pg_restore -C -d postgres db.dump

2
kiedy robię pg_restore, otrzymuję pg_restore: [archiwizator] plik wejściowy wygląda na zrzut w formacie tekstowym. Użyj psql.
Haseeb Ahmad

Którego używam do przywracania bazy danych?
Haseeb Ahmad

66
to nie odpowiada na pytanie
dopatraman

1
na sposób przywrócenia z wyewidencjonowania pliku tekstowego serverfault.com/questions/260607/…
chrs

5
IMO ten post zawiera zbyt wiele szczegółów, które zaciemniają odpowiedź. Autor nie zauważył, że dokumentacja pg_dump dla parametru '-F' nie mówi, że format domyślny ('p' / 'plain') jest odpowiedni dla pg_restore. pg_restore wymaga, aby pg_dump był używany z formatami 'c', 'd' lub 't'.
Matt

59

Powyższa odpowiedź nie działa dla mnie, to zadziałało:

psql db_development < postgres_db.dump


Krótkie i słodkie. U mnie też zadziałało.
Uczeń

11

Dla mnie, gdy próbuję przywrócić ze zdalnego hosta, którego użyłem

psql -U username -p 5432 -h 10.10.10.1 -d database < db.dump

działało dobrze. A jeśli nie zdalne, po prostu następujące polecenie zadziałało.

psql -d database < db.dump

7

Aby utworzyć kopię zapasową za pomocą pg_dumpzgodnego z nią pg_restore, musisz użyć --format=custom/ -Fcpodczas tworzenia zrzutu.

Z dokumentów:

Wyprowadź archiwum w niestandardowym formacie, odpowiednie do wprowadzenia do pg_restore.

Twoje pg_dumppolecenie może więc wyglądać następująco:

pg_dump --file /tmp/db.dump --format=custom --host localhost --dbname my-source-database --username my-username --password

I twoje pg_restorepolecenie:

pg_restore --verbose --clean --no-acl --no-owner --host localhost --dbname my-destination-database /tmp/db.dump

6

Dla mnie to działa jak ten. C: \ Program Files \ PostgreSQL \ 12 \ bin> psql -U postgres -p 5432 -d dummy -f C: \ Users \ Downloads \ d2cm_test.sql


2
Prosta i pomocna odpowiedź!
Rax Weber

1
Dziękuję @RAJNISH YADAV.
Amit

0

jeśli używasz pg_dump z -Fp do tworzenia kopii zapasowych w formacie zwykłego tekstu, użyj następującego polecenia:

cat db.txt | psql dbname

aby skopiować wszystkie dane do bazy danych o nazwie dbname


0

Jeśli masz pełny zrzut bazy danych:

PGPASSWORD="your_pass" psql -h "your_host" -U "your_user" -d "your_database" -f backup.sql

Jeśli jednak masz schematy przechowywane oddzielnie, to nie zadziała. Następnie musisz wyłączyć wyzwalacze wstawiania danych, podobnie jak pg_restore --disable-triggers. Możesz wtedy użyć tego:

cat database_data_only.gzip | gunzip | PGPASSWORD="your_pass" psql -h "your_host" -U root "your_database" -c 'SET session_replication_role = replica;' -f /dev/stdin

Na marginesie, myślę, że jest to bardzo niefortunna wada postgres. Domyślny sposób tworzenia zrzutu pg_dumpjest niezgodny z pg_restore. Jednak z kilkoma dodatkowymi klawiszami jest. WTF?

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.