pg_restore [ -a ] [ -c ] [ -C ] [ -d dbname ] [ -f archive-file ] [ -F format ] [ -i index ] [ -l ] [ -L contents-file ] [ -N | -o | -r ] [ -O ] [ -P function-name ] [ -R ] [ -s ] [ -S ] [ -t table ] [ -T trigger ] [ -v ] [ -x ] [ -h host ] [ -p port ] [ -u ] [ archive-file ]
pg_restore は pg_dump によって 非プレインテキストフォーマットでダンプされた Postgres データベースを格納するための ものです。
7.1 リリースで新しくできたアーカイブファイルは、pg_restore がデータベースを再構築するための十分な情報を持っていますが、 pg_restore が何をリストアするかを選ぶこと、更に リストアされる前のアイテムを再オーダーすることまで許します。アーカイブ ファイルはアーキテクチャを越えて移植できるよう設計されています。 pg_dump はすべてのユーザ定義型、関数、テーブル、 インデックス、集約、そして演算子を再発生させるために必要な問い合わせ を作ります。更に、全てのデータはコピーされるので(スクリプト用のテキスト フォーマットで)、またいつでも読みこむことができます。
pg_restore はアーカイブファイルを読み込み、コマンド パラメータに基づく要求される順番で相応しい SQL を出力します。明かに、 ダンプファイルに存在しない情報はリストアすることができません。ですから もしそのダンプが "INSERT のオプションとして のダンプデータ " を使って作られた場合、pg_restore は COPY 文を使ってロードすることはできません。
最も柔軟な出力ファイルフォーマットは "カスタム"フォーマット (-Fc)です。これは全てのアーカイブに格納されたセレクトと 再オーダーを可能にし、デフォルトでは圧縮されます。 tar フォーマット (-Ft) は圧縮されず、ロード時にデータを再オーダーする ことは不可能ですが、それ以外では非常に柔軟です。
アイテムを再オーダーするためには、まずはじめにアーカイブの中身をダンプ することが必要です。
$ pg_restore archive.file -l > archive.listこのファイルはヘッダとそれぞれのアイテムに対する一行から成り立っています。 下記は例です。
; ; Archive created at Fri Jul 28 22:28:36 2000 ; dbname: birds ; TOC Entries: 74 ; Compression: 0 ; Dump Version: 1.4-0 ; Format: CUSTOM ; ; ; Selected TOC Entries: ; 2; 145344 TABLE species postgres 3; 145344 ACL species 4; 145359 TABLE nt_header postgres 5; 145359 ACL nt_header 6; 145402 TABLE species_records postgres 7; 145402 ACL species_records 8; 145416 TABLE ss_old postgres 9; 145416 ACL ss_old 10; 145433 TABLE map_resolutions postgres 11; 145433 ACL map_resolutions 12; 145443 TABLE hs_old postgres 13; 145443 ACL hs_oldセミコロンはコメント区切り文字で、行の始まりの数字はそれぞれの アイテムに割り当てられた内部アーカイブ ID を意味します。
ファイル内の行はコメントアウト、削除、そして再オーダーすることが できます。例えば、
10; 145433 TABLE map_resolutions postgres ;2; 145344 TABLE species postgres ;4; 145359 TABLE nt_header postgres 6; 145402 TABLE species_records postgres ;8; 145416 TABLE ss_old postgresは pg_restore への入力として使うことができ、 アイテム 10 と 6 のみをその順でリストアします。
$ pg_restore archive.file -L archive.list
pg_restoreは以下のコマンドラインオプションを 受けつけます。(長いオプションフォームは限られたプラットフォーム でしか使うことができません。)
リストアされるべきアーカイブファイルの位置を指定します。もし指定 されず、-f オプションも指定されない場合、 標準入力が使われます。
データのみをリストアし、スキーマ(定義)は格納しません。
作成する前にスキーマを掃除(削除)します。
スキーマを作成するために SQL を含めます。
データベース dbname に接続し、データベースに直接リストアします。BLOB は直接データベース 接続を使ってのみリストアすることができます。
作成されたスクリプト用の出力ファイルを指定します。 (-lオプションと一緒に使います。)デフォルトは 標準出力です。
アーカイブのフォーマットを指定します。pg_restore がフォーマットを自動的に決定するため、フォーマットの指定は 必ずしも必要ではありません。もし指定された場合、下記のうちの いずれかになります。
アーカイブは tar のアーカイブです。 このアーカイブフォーマットを使うことによって再オーダー もしくはデータベースがリストアされる際のスキーマ要素の削除 が可能になります。更に、どのデータがリストア時にリロードされるかを 制限することも可能です。
アーカイブは pg_dump のカスタムフォーマット です。これはもっとも柔軟なフォーマットで、スキーマ要素や データロードの再オーダーなどが許可されます。このフォーマットも デフォルトでは圧縮されています。
指定された index の定義のみをリストアします。
アーカイブの中身をリストします。このコマンドの出力は、リストアされる アイテムを制限、再オーダーするために-L オプション で使うことができます。
list-fileの 要素のみをファイルに現われる順にリストアします。行は動かすことが でき、行の始めに ';' を付けることによりコメントアウトすることが できます。
もともとのダンプの順番でアイテムをリストアします。デフォルトでは pg_dump は、pg_dumpを するのに便利な順番でアイテムをダンプします。そして変えられた OID 順でアーカイブを保存します。このオプションは OID の順番 を無効にします。
アイテムを OID の順番でリストアします。デフォルトでは pg_dump は、pg_dump にとって 便利な順番でアイテムをダンプします。そして変えられた OID の順番 でアーカイブを保存します。このオプションは OID の順番を厳しく 強制します。
もともとのオブジェクト所有権をリストアするための試みを防ぎます。 オブジェクトは、データベースに付随するために使われたユーザ名に 所有されます。
リストアされるべきプロシージャもしくは関数を指定します。
変えられた OID の順番でアイテムをリストアします。デフォルトでは pg_dump はpg_dumpにとって 便利な順番でアイテムをダンプし、変えられた OID の順番でアーカイブ を保存します。ほとんどのオブジェクトは OID 順にリストアされますが、 いくつかのもの (例えばルールやインデックス)は OID に関係なく プロセスの最後にリストアされます。このオプションはデフォルトです。
pg_restore が
\connect文、もしくは直接接続されている場合はデータベースへの再接続、を 発行することを禁止します。
スキーマ(定義)をリストアし、データはありません。シーケンス値はリセット されます。
トリガを無効にする際、もしくはスキーマ要素の所有権を設定する際に 使うために、スーパーユーザのユーザ名を指定します。デフォルトでは pg_restore は、もしそれがスーパーユーザならば 現在のユーザ名を使います。
スキーマ/データをtable にのみリストアします。
トリガの定義 のみをリストアします。
verbose モードを指定します。
ACL (grant/revoke コマンド)のリストアを防ぎます。
pg_restore は更に以下のコマンドライン引数を 接続パラメータとして受けつけます。
postmaster が起動しているマシンのホスト名 を指定します。もしホストがスラッシュで始まる場合、Unix ドメイン ソケット用のディレクトリとして使われます。
postmasterが接続を監視するインターネット TCP/IP ポートもしくは Unix ドメインソケットファイル拡張を指定します。 ポート番号はデフォルトでは 5432 もしくは環境変数 PGPORT (設定されている場合) になります。
パスワード認証を使います。ユーザ名とパスワードを促します。
Connection to database 'template1' failed. connectDBStart() -- connect() failed: No such file or directory Is the postmaster running locally and accepting connections on Unix socket '/tmp/.s.PGSQL.5432'?
pg_restore は、指定されたホストとポート上の postmaster プロセスに付随することができません でした。もしこのメッセージが出たら、postmaster が正しいホスト上で起動していて正しいポートを指定したことを 確認してください。もし認証システムを使うサイトの場合は、 必要とされる認証証明があることを確認して下さい。
Note: 直接データベース接続が -d オプションで指定されるとき、 pg_restore は内部で SQL を 実行します。もし pg_restore の実行で問題がある 場合、例えば psql などを使ってデータベースから 情報を選択できることを確認してください。
pg_restore の制限は下記で説明されています。
データをテーブルに格納する時、pg_restoreは データを挿入する前にユーザテーブルにトリガを無効とするための問い合わせを 発し、そしてデータが挿入されるとそれらをまた可能にするための問い合わせ を発します。もしリストアが途中で中止された場合、システムカタログは 間違った状態で残されるかもしれません。
pg_restore は単一のテーブルには BLOB (ラージオブジェクト)をリストアしません。もしアーカイブが BLOB を 含む場合、すべての BLOB がリストアされます。
pg_dump の制限に関する詳細は、 pg_dump のドキュメントを見て下さい。