アプリ版:「スタンプのみでお礼する」機能のリリースについて

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用のファイルヘッダがありませんでした

よろしくお願い致します。

A 回答 (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 (データベース名)
で使えたはずです
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す