kuniku’s diary

はてなダイアリーから移行(旧 d.hatena.ne.jp/kuniku/)、表示がおかしな箇所はコメントをお願いします。記載されている内容は日付およびバージョンに注意してください。直近1年以上前は古い情報の可能性が高くなります。

postgresのpg_restoreでリストアできるファイル

ドキュメント

https://www.postgresql.jp/document/9.1/html/app-pgrestore.html

pg_restoreは、pg_dumpによってアーカイブされた平文形式以外のアーカイブファイルを使って、PostgreSQLデータベースをリストアするためのユーティリティです。
pg_restoreはそのデータベースに接続し、アーカイブを直接そのデータベースにリストアします。 データベース名が指定されなかった場合は、データベースを再構築するために必要となるSQLコマンドが含まれたスクリプトが作成されます(ファイルもしくは標準出力に書き出されます)。 このスクリプトの出力はpg_dumpの平文形式の出力と同じです。 実際に、出力を制御するオプションの中には、pg_dumpのオプションに類似したものがあります。

当然ながら、pg_restoreによって、アーカイブファイルに存在しない情報をリストアすることはできません。 例えば、アーカイブが"INSERTコマンドの形式でデータダンプ"を行うオプションを使用して作成されたものであった場合、pg_restoreはCOPY文を使用してデータを読み込むことはできません。

Windows環境のpg_restore.exeでのリストア

  • 前提
    • 移行先:postgres9.3 移行前:cygwin上のpostgres7.4.5
    • Windows postgresにリストアする。pgadminでcompressバックアップされたファイルを戻す。
    • DB名を指定して戻す
    • DBは予め作成されている
    • Windowsのpostrgresでインストール時のlocal=「Jpanese,Japan」を選択してしまった・・・
DBを作成
set PATH=%PATH%;C:\PostgreSQL\9.3\bin
  • 接続
psql -U postgres
→プロンプトにつづいてパスワードを入力
  • CREATE DATABASEを実行
    • EUC_JPのデータベース(訳あってEUC_JPなので)
CREATE DATABASE  test_db1 WITH ENCODING='EUC_JP' OWNER=postgres  TEMPLATE=template0  LC_COLLATE='C' LC_CTYPE='C' CONNECTION LIMIT=-1;
* リストア
set PATH=%PATH%;C:\PostgreSQL\9.3\bin
  • リストアを実行
pg_restore.exe --host localhost --port 5432 --username "postgres" --dbname "test_db1" --verbose "C:\temp\postgres\test_db1-compress.backup"