pg_restore: [archiwizator] nie znalazł magicznego ciągu w nagłówku pliku

13

Korzystam z PostgreSQL 9.1 i chcę przywrócić pliki kopii zapasowych wygenerowane za pomocą pg_dump:

sudo pg_dump -h 127.0.0.1 -U postgres --clean --inserts -E UTF8 -f out.sql database_name

To polecenie generuje prawidłowy plik SQL, który zaczyna się od upuszczenia wszelkich istniejących obiektów bazy danych, następnie generuje wszystkie tabele, indeksuje, sekwencje itd., A na koniec wstawia dane.

Kiedy próbuję przywrócić wygenerowany plik kopii zapasowej za pomocą: (dodano podział wierszy tylko do celów wyświetlania)

sudo pg_restore 
    -d database_name -h 127.0.0.1 -U postgres
    --format=c --clean --create out.sql

zawiesza się i drukuje:

pg_restore: [archiver] did not find magic string in file header

Jaki jest tego powód?

maja
źródło

Odpowiedzi:

19

Przywracasz za pomocą, pg_restore --format=c ...ale pg_dumpnie zostało --format=cto zrobione za pomocą domyślnego, zwykłego formatu.

Z pg_dumpstrony man:

  -F format, --format=format
       Selects the format of the output.  format can be one of the
       following:

       p, plain
           Output a plain-text SQL script file (the default).

Zrzut w formacie zwykłym należy podać bezpośrednio do psqlnarzędzia wiersza polecenia, pg_restorenie wie, co to jest, co jest przyczyną tego komunikatu o błędzie: nie znaleziono magicznego ciągu w nagłówku pliku .

Możesz spojrzeć bezpośrednio na plik zrzutu more out.sqlw powłoce, a zobaczysz czytelne polecenia SQL. Przywróć za pomocą psql -f out.sql [other options]. Prawdopodobnie będziesz chciał najpierw utworzyć docelową bazę danych, ponieważ --createopcja nie jest dostępna wpg_dump wywołaniu.

Z drugiej strony możesz ponownie wywołać zrzut dodając --format=cdo jego opcji. Wtedy byłoby odwrotnie: pg_restorenależy go użyć do interpretacji pliku zrzutu w niestandardowym formacie.

Daniel Vérité
źródło
0

Jednym z możliwych problemów jest obcięcie pliku danych. Sprawdź, czy pobierasz pełny plik, porównując rozmiary plików.

Sterling Cobb
źródło
0

Jeśli używasz git-lfs, upewnij się, że masz rzeczywisty plik, a nie wskaźnik!

mehmet
źródło