• ベストアンサー

tar.gzファイルのリストアについて

Postgres初心者です。 教えてください。 pg_dumpコマンドでdump拡張しのバックアップファイルを生成し、 tarコマンドで****.tar.gzファイルに圧縮しました。 このtar.gzのファイルを直接リストアするコマンドがあれば 教えていただけないでしょうか? -bash-3.2$pg_restore -U postgres -d (データベース名) < ****.tar.gz と実行すると、以下のエラーメッセージが表示されます。 →pg_restore: [アーカイバ] 入力ファイルが有効なアーカイブではないようです。 -bash-3.2$gunzip -C ****.tar.gz | pg_restore -d (データベース名) と実行すると、以下のエラーメッセージが表示されます。 →pg_restore: [tarアーカイバ] tarアーカイブ内でファイルtoc.dat用のファイルヘッダがありませんでした よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

tarコマンドで.tar.gzにした、ということは、 tarでアーカイブ(複数のファイルを一つの書庫に入れる。無圧縮ZIPみたいなもの)した後、gzipで圧縮した状態になっています。 pg_restore -U postgres -d (データベース名) < ****.tar.gz では、その圧縮されたままの入力になるので、不正となります。 gunzip -C ****.tar.gz | pg_restore -d (データベース名) これでも、 gzipの展開はされていますが、tar形式のアーカイブになっています。 元のダンプファイルではありません。 pg_restoreで使うためには、アーカイブの中にあるファイルを取り出す必要があります。 GNUtarの場合、 -Oオプションで標準出力に出力、というのがあるので tar -O zxvf ****.tar.gz | pg_restore -d (データベース名) でできるかと思います(実験はしていません) 本来のtar等、標準出力オプションが無い場合は、 tar.gzから元のダンプファイルをファイルに展開→そのファイルをpg_restore となります。 そもそも、tar+gzipでアーカイブして圧縮するのが間違いです。 単にgzipで圧縮すればいいでしょう。そうしていれば gunzip -c ****.gz | pg_restore -d (データベース名) で使えたはずです

関連するQ&A