pg_restore

Name

pg_restore --  Postgres データベースのpg_dump が作ったアーカイブファイルへのリストア

Synopsis

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_restoreCOPY 文を使ってロードすることはできません。

最も柔軟な出力ファイルフォーマットは "カスタム"フォーマット (-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は以下のコマンドラインオプションを 受けつけます。(長いオプションフォームは限られたプラットフォーム でしか使うことができません。)

archive-name

リストアされるべきアーカイブファイルの位置を指定します。もし指定 されず、-f オプションも指定されない場合、 標準入力が使われます。

-a, --data-only

データのみをリストアし、スキーマ(定義)は格納しません。

-c, --clean

作成する前にスキーマを掃除(削除)します。

-C, --create

スキーマを作成するために SQL を含めます。

-d dbname, --dbname=dbname

データベース dbname に接続し、データベースに直接リストアします。BLOB は直接データベース 接続を使ってのみリストアすることができます。

-f filename, --file=filename

作成されたスクリプト用の出力ファイルを指定します。 (-lオプションと一緒に使います。)デフォルトは 標準出力です。

-F format, --format=format

アーカイブのフォーマットを指定します。pg_restore がフォーマットを自動的に決定するため、フォーマットの指定は 必ずしも必要ではありません。もし指定された場合、下記のうちの いずれかになります。

t

アーカイブは tar のアーカイブです。 このアーカイブフォーマットを使うことによって再オーダー もしくはデータベースがリストアされる際のスキーマ要素の削除 が可能になります。更に、どのデータがリストア時にリロードされるかを 制限することも可能です。

c

アーカイブは pg_dump のカスタムフォーマット です。これはもっとも柔軟なフォーマットで、スキーマ要素や データロードの再オーダーなどが許可されます。このフォーマットも デフォルトでは圧縮されています。

-i index, --index=index

指定された index の定義のみをリストアします。

-l, --list

アーカイブの中身をリストします。このコマンドの出力は、リストアされる アイテムを制限、再オーダーするために-L オプション で使うことができます。

-L list-file, --use-list=list-file

list-fileの 要素のみをファイルに現われる順にリストアします。行は動かすことが でき、行の始めに ';' を付けることによりコメントアウトすることが できます。

-N, --orig-order

もともとのダンプの順番でアイテムをリストアします。デフォルトでは pg_dump は、pg_dumpを するのに便利な順番でアイテムをダンプします。そして変えられた OID 順でアーカイブを保存します。このオプションは OID の順番 を無効にします。

-o, --oid-order

アイテムを OID の順番でリストアします。デフォルトでは pg_dump は、pg_dump にとって 便利な順番でアイテムをダンプします。そして変えられた OID の順番 でアーカイブを保存します。このオプションは OID の順番を厳しく 強制します。

-O, --no-owner

もともとのオブジェクト所有権をリストアするための試みを防ぎます。 オブジェクトは、データベースに付随するために使われたユーザ名に 所有されます。

-P function-name, --function=function-name

リストアされるべきプロシージャもしくは関数を指定します。

-r, --rearrange

変えられた OID の順番でアイテムをリストアします。デフォルトでは pg_dumppg_dumpにとって 便利な順番でアイテムをダンプし、変えられた OID の順番でアーカイブ を保存します。ほとんどのオブジェクトは OID 順にリストアされますが、 いくつかのもの (例えばルールやインデックス)は OID に関係なく プロセスの最後にリストアされます。このオプションはデフォルトです。

-R, --no-reconnect

pg_restore

\connect
文、もしくは直接接続されている場合はデータベースへの再接続、を 発行することを禁止します。

-s, --schema-only

スキーマ(定義)をリストアし、データはありません。シーケンス値はリセット されます。

-S username, --superuser=username

トリガを無効にする際、もしくはスキーマ要素の所有権を設定する際に 使うために、スーパーユーザのユーザ名を指定します。デフォルトでは pg_restore は、もしそれがスーパーユーザならば 現在のユーザ名を使います。

-t table, --table=table

スキーマ/データをtable にのみリストアします。

-T trigger, --trigger=trigger

トリガの定義 のみをリストアします。

-v, --verbose

verbose モードを指定します。

-x, --no-acl

ACL (grant/revoke コマンド)のリストアを防ぎます。

pg_restore は更に以下のコマンドライン引数を 接続パラメータとして受けつけます。

-h host, --host=host

postmaster が起動しているマシンのホスト名 を指定します。もしホストがスラッシュで始まる場合、Unix ドメイン ソケット用のディレクトリとして使われます。

-p port, --port=port

postmasterが接続を監視するインターネット TCP/IP ポートもしくは Unix ドメインソケットファイル拡張を指定します。 ポート番号はデフォルトでは 5432 もしくは環境変数 PGPORT (設定されている場合) になります。

-u

パスワード認証を使います。ユーザ名とパスワードを促します。

診断

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_dump の制限に関する詳細は、 pg_dump のドキュメントを見て下さい。

下記はデータベースをダンプする例です。

$ pg_dump mydb > db.out

このデータベースをリロード するには下記のようにします。

$ psql -d database -f db.out

mydb と呼ばれる BLOB(ラージオブジェクト) を含むデータベースを tar ファイルに ダンプするには下記のようにします。

$ pg_dump -Ft -b mydb > db.tar

このデータベース(BLOB(ラージオブジェクト) を含むもの)を既存の newdb と呼ばれるデータベースにリロードします。

$ pg_restore -d newdb db.tar

参照

pg_dump , pg_dumpall, psql, PostgreSQL 管理者用ガイド