pg_restore Dateiformat

Hallo zusammen,

ich habe mittels cronjob einen pg_dump meiner Datenbank erstellt. Der Versuch diesen mittels pg_restore wiederherzustellen schlägt leider fehl.

$ /usr/local/pgsql/bin/pg_restore -d newdb /dbbackups/olddb-20080806.gz

Fehler:

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

Ok. Es wurde schon darauf verwiesen, dass die wiederherzustellende Datei “in one of the non-plain text format” vorliegen muss.

Aber wie kann ich das denn überprüfen bzw. beeinflussen? Beim pg_dump gebe ich ja kein Dateiformat an. Die Meldung kommt sowohl bei Angabe des Archives (dump.gz) als auch der entpackten Datei (dump), die übrigens keine Endung hat.
Es liegt also definitiv nicht am Inhalt der Datei?! Muss ich am pg_dump Befehl etwas ändern, z.B. explizite Angabe eines Formats?


Christian

pg_dump erzeugt, wenn man es nicht anders spezifiziert, eine ASCII-SQL-Datei.

Du kannst diese also entweder in psql abtippen oder einlesen, wobei ich letztere Version empfehle.

Andreas

ok. Habe die Datei mal per sql-Import eingelesen und das hat funktioniert.

Wie nutze ich dann aber pg_restore korrekt?

Dies offenbart die man-page:

DESCRIPTION
       pg_restore  is  a  utility  for restoring a PostgreSQL database from an archive created by pg_dump(1) in one of the non-plain-text formats. It will
       issue the commands necessary to reconstruct the database to the state it was in at the time it was saved. The archive files also  allow  pg_restore
       to  be selective about what is restored, or even to reorder the items prior to being restored. The archive files are designed to be portable across
       architectures.

Andreas

Nachdem ja jetzt schon alles funktioniert:

Man testet ein Backup bzw. die gesamte Backup-Prozedur, wenn man das Backup einrichtet. Nicht erst, wenn man das Backup benötigt.

Daher hoffe ich jetzt mal, du hattest zwar schon einen Cronjob eingerichtet aber das war jetzt der erste Test, ob das Backup auch funktioniert :smiley: :smiley:

Richtig.

Ja. Soweit ganz nett…
Ich habe das mal so verstanden: pg_dump > alteDB sichert meine Daten und das Pendant pg_restore -d neueDB -f alteDB stellt sie wieder her.
Wenn also pg_dump eine Datei erzeugt, warum meckert dann pg_restore, dass das keine gültige Datei ist?! (vorher natürlich create neueDB)

Meine Frage daher: Müssen bei den Befehlen weitere Parameter angegeben werden, damit sie ihren Zweck erfüllen?
Oder warum kann pg_restore mit der Datei, die pg_dump erzeugt nixchts anfangen?


Grüße

pg_dump erzeugt, wie von akretschmer schon erwähnt, ein Klartextfile. Dieses kannst du mit psql oder z.B. pgadminIII wieder einlesen.

pg_restore ist nur für das PostgreSQL-spezifische Datenformat gedacht.

Ok. Manchaml reicht es eben nicht, nur kurz ins Manual zu schauen :rolleyes:

Aus dem postgreSQL Manual:
pg_restore – restore a PostgreSQL database from an archive file created by pg_dump

Viel weiter unten steht ja auch, dass man bei Verwendung von pg_restore beim Aufruf von pg_dump den Zusatz -Fc (Custom archiv format) angeben muss. Bei archiv file habe ich da eher an eine gepackte Variante gedacht… :astonished:


Nochmals Danke.