Użyłem pg_dump na jednym komputerze i skopiowałem plik wynikowy na inny, gdzie próbowałem go przywrócić. Uważam, że schemat jest taki sam. Dostaję jednak:
pg_restore: [archiver] input file does not appear to be a valid archive
Wykonałem następujące operacje:
pg_dump -a -f db.txt dbname
i:
pg_restore -a -d dbname db.txt
Co może być nie tak?
postgresql
gruszczy
źródło
źródło
Odpowiedzi:
Wysypujesz w formacie zwykłego sql, który został zaprojektowany do przesyłania do psql. Pg_restore nie rozpoznaje tego.
powinien załatwić sprawę
źródło
psql dbname < db.txt
;)pg_dump
domyślnie tworzy polecenia sql niezbędne do odtworzenia danych. Aby go odzyskać, wystarczy wywołaćpsql
(niepg_restore
) plik z danymi wejściowymi.pg_restore
jest używany tylko w formacie binarnym (nie jest to domyślny i rzadziejnie zalecany) formatpg_dump
. Przeczytaj dokumenty .Aktualizacja:
pg_dump
Formaty binarne (-Fc
-Ft
), które mają być używane,pg_restore
są w porządku i oferują dodatkową elastyczność. Są jednak mniej standardowe (nie SQL), mniej skłonne do importowania z niektórych narzędzi (np. Nakładki php) lub manipulowania za pomocą edytora tekstowego, i nieco mniej przenośne do innych wersji, a nawet innych baz danych. W przypadku kopii zapasowych trzymałbym się domyślnego zwykłego formatu. W innych scenariuszach opcja binarna + pg_restore może być jednakowo lub bardziej trafna.Należy zachować ostrożność, ponieważ w Postgresql, w typowym scenariuszu , tworzenie kopii zapasowej zwykle odbywa się za pomocą pg_dump (zwykły) i przywracania za pomocą standardowego klienta wiersza poleceń ( psql ).
źródło
Spróbuj przekazać tę
--format=c
opcję dopg_dump
. Pozwolipg_restore
to go przywrócić.źródło
pg_restore: [archiver] did not find magic string in file header
pg_dump --format=c ...> archivefile
, a następnie użyjeszpg_restore
dalejarchivefile
, to (przynajmniej kiedy właśnie to przetestowałem) działa dobrze. Może twój plik jest jakoś uszkodzony? A może trafiłeś konkretny błąd?To właśnie zrobiłbym, aby wykonać kopię zapasową mojej starej bazy danych i przywrócić
Aby wykonać kopię zapasową bazy danych
Aby przywrócić tę kopię zapasową
Przeczytaj więcej na pg_dump i pg_restore
źródło
W systemie Windows użytkownicy próbują
Działa jak marzenie
źródło
Możesz zrobić coś na
SOURCE
polecenie MySQL :Następnie w terminalu postgresql:
źródło
cat dumpFileName | psql -h ip -d nazwa_db -U nazwa_użytkownika -W
źródło
Ten komunikat o błędzie może również oznaczać, że coś jest nie tak z plikiem kopii zapasowej (lub twoimi założeniami na ten temat).
W jednym przypadku zamontowałem plik kopii zapasowej w kontenerze Docker i próbowałem przywrócić, ale nie udało się
does not appear to be a valid archive
. W rzeczywistości plik był pusty, ponieważ podłączenie nie zostało wykonane poprawnie.źródło