Vraag pg_dump en pg_restore: invoerbestand lijkt geen geldig archief te zijn


Ik heb pg_dump op één machine gebruikt en het resultaatbestand naar een ander gekopieerd, waar ik probeerde het te herstellen. Ik geloof dat schema hetzelfde is. Ik krijg echter:

pg_restore: [archiver] input file does not appear to be a valid archive

Ik heb de volgende bewerkingen gedaan:

pg_dump -a -f db.txt dbname

en:

pg_restore -a -d dbname db.txt

Wat kan er mis zijn?


62
2018-06-14 16:15


oorsprong


Probeer de dump op dezelfde computer te importeren die de dump heeft gegenereerd. Bekijk ook de Postgres-versies. - Hank Gay
Ik kan het niet proberen het op dezelfde machine te importeren, omdat het een productiemachine is. Enig idee, wat kan ik nog meer doen? - gruszczy
Deze oplossing kan ook voor sommige mensen relevant zijn: stackoverflow.com/questions/42433414/... - Muhammad Hannan


antwoorden:


U dumpt in gewoon SQL-formaat dat is ontworpen om te worden gevoerd naar psql. Dit wordt niet herkend door pg_restore.

cat db.txt | psql dbname

zou het moeten doen


88
2018-06-14 16:26



of psql dbname < db.txt ;) - Aleksey Deryagin


pg_dump maakt standaard de SQL-commmands die nodig zijn om de gegevens opnieuw te maken. Om het te herstellen, moet je gewoon een beroep doen op psql (niet pg_restore ) met het bestand als invoer. pg_restore mag alleen worden gebruikt voor het binaire bestand (niet standaard en minder gebruikelijk) niet aangeraden) indeling van pg_dump. Lees de docs.

Update: de pg_dump binaire formaten (-Fc  -Ft) die moeten worden gebruikt pg_restore zijn ok, en bieden wat extra flexibiliteit. Maar ze zijn minder standaard (niet-SQL), minder geschikt voor het importeren van sommige hulpmiddelen (bijvoorbeeld een php-frontend) of manipuleren met een teksteditor en een beetje minder draagbaar voor andere versies en zelfs andere databases. Voor back-ups zou ik bij het standaard standaardformaat blijven. Voor andere scenario's kan de binaire + pg_restore-optie even of meer geschikt zijn.

Het punt om te behouden is dat in Postgresql, in de typisch scenario, de back-up wordt normaal gedaan door pg_dump (gewoon) en herstel met de standaard opdrachtregelclient (psql).


24
2018-06-14 16:22



[OT] Ik wil verschillen betreffende de "niet aanbevolen" status van het aangepaste uitvoerformaat - de zin "Dit is het meest flexibele formaat omdat het herordenen van laadgegevens en objectdefinities mogelijk maakt ..." uit de handleiding lijkt voor mij als een echte goedkeuring. - Milen A. Radev
"niet aanbevolen" was een overdrijving, daar ben ik het mee eens. Maar "meest flexibel" betekent niet noodzakelijkerwijs "meest aanbevolen". Verduidelijkt. - leonbloy


Probeer het --format=c optie om pg_dump. Dit zal toestaan pg_restore om het te herstellen.


12
2018-06-14 16:23



Zou degene die dit heeft aangepast dit uitleggen waarom? Het geaccepteerde antwoord legt uit dat dit zal werken :-)
@skrafi: Wat is uw punt? - psmears
sorry, kopie-geplakt verkeerde uitvoer, de juiste is pg_restore: [archiver] did not find magic string in file header dus dit werkt niet voor eenvoudige sql dump - skrafi
@skrafi: ik weet niet zeker wat je bedoelt. Als je gebruikt pg_dump --format=c ...> archivefileen gebruik vervolgens pg_restore op archivefile, dan (in ieder geval toen ik het zojuist testte) werkt het prima. Misschien is je bestand op de een of andere manier corrupt? Of heb je een bepaalde bug aangeraakt? - psmears


Dit is wat ik zou doen om mijn oude database te back-uppen en te herstellen

Om een ​​back-up van uw database te maken

pg_dump --format=c olddb_name > db_dump_file.dump

Om die back-up te herstellen

pg_restore -v -d newdb_name db_dump_file.dump

Lees meer over pg_dump en pg_restore


4
2018-02-27 09:03





Voor Windows-gebruikers proberen

type db.txt | psql --username="YOURNAME" dbname

Werkt perfect


3
2018-04-15 17:59





Je kunt iets doen met MySQL's SOURCE commando:

psql dbname

Vervolgens in de postgresql-terminal:

\i filename

1
2018-01-03 10:49





cat dumpFileName | psql -h ip -d dbName -U userName -W


0
2018-04-11 07:06



Het is meestal handig als je uitlegt wat dat doet en waarom het kan helpen. - Falcon Momot


Dit foutbericht kan ook betekenen dat er daadwerkelijk iets mis is met het back-upbestand (of uw veronderstellingen daarover).

In één geval had ik een back-upbestand in een Docker-container geplaatst en probeerde het te herstellen, maar er is niet in geslaagd does not appear to be a valid archive. En in feite was het bestand leeg, omdat de mount niet correct werd uitgevoerd.


0
2018-02-20 15:54