質問: 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用のファイルヘッダがありませんでした よろしくお願い致します。
回答: 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 (データベース名) で使えたはずです