pg_dumpはPostgreSQLデータベースをバックアップするユーティリティです。 データベースを同時に使用していても一貫性のあるバックアップを作成します。 pg_dumpは他のユーザによるデータベースへのアクセス(読み書き)をブロックしません。
スクリプトとして、あるいは、アーカイブファイル形式でダンプすることができます。 スクリプトダンプは、保存時の状態のデータベースを再構成するために必要なSQLコマンドが書き込まれたプレインテキストファイルです。 こうしたスクリプトをリストアするにはpsqlを使用します。 スクリプトファイルは、他のマシンや他のアーキテクチャ上でさえも、データベースを再構築するために使うことができます。 また、少し編集すれば他のSQLデータベース製品上でもデータベースを再構築することができます。
もう一つのアーカイブファイル形式では、データベースを再構築するためにはpg_restoreを使用しなければなりません。 このファイルを使用して、pg_restoreはリストア対象を選択することも、リストアするアイテムの並び替えも行なうことができます。 アーカイブファイルでは、スクリプトダンプではできなかった、"ラージオブジェクト"の保管とリストアも行うことができます。 アーカイブファイルもまた、アーキテクチャを越えて移植できるように設計されています。
アーカイブファイル形式の1つを使用し、pg_restoreと組み合わせて使用する場合、pg_dumpは柔軟なアーカイブ/転送機構を提供します。 pg_dumpを使用してデータベース全体をバックアップし、pg_restoreを使用して、アーカイブの内容を検査したり、データベースの一部を選択してリストアしたりすることができます。 もっとも柔軟な出力ファイル形式は、"custom"形式(-Fc)です。 この形式は、保存された項目の選択や並び換えを行うことができ、また、デフォルトで圧縮されています。 tar形式(-Ft)は圧縮されず、また、ロードの際に並び替えを行なうことができません。 しかし、他の点では、かなり柔軟なものです。 その上、tarなどの標準的なUnixツールを使用して操作することができます。
pg_dumpの実行中は、(標準エラーに出力される)警告、特に後述の制限に関する警告が出力されていないか確認してください。
以下のコマンドラインオプションは出力形式とその内容を制御します。
ダンプ(抽出)するデータベースの名前を指定します。 指定されていない場合は、PGDATABASE環境変数が使われます。 この変数も設定されていない場合は、接続のために指定されたユーザ名が使用されます。
データのみをダンプし、スキーマ(データ定義)はダンプしません。
このオプションは、プレインテキスト形式の場合にのみ意味があります。 アーカイブ形式では、pg_restoreを呼び出す時にこのオプションを指定することができます。
ラージオブジェクトをダンプに含めます。 非テキスト出力形式を選択しなければなりません。
データベースオブジェクトを作成する(ためのコマンドの)前に掃除(削除)するためのコマンドを書き出します。
このオプションは、プレインテキスト形式の場合にのみ意味があります。 アーカイブ形式では、pg_restoreを呼び出す時にこのオプションを指定することができます。
データベース自体を作成し、作成したデータベースに接続するコマンドを始めに出力します。 (この形のスクリプトを使用する場合、スクリプトを実行する前にどのデータベースに接続すればいいかという問題を考える必要がなくなります。)
このオプションは、プレインテキスト形式の場合にのみ意味があります。 アーカイブ形式では、pg_restoreを呼び出す時にこのオプションを指定することができます。
データを(COPYではなく)INSERTコマンドとしてダンプします。 これを行うとリストアに非常に時間がかかります。 主にPostgreSQL以外のデータベースへロード可能なダンプを作成する時に有用です。 列の順序を変更した場合はリストアが失敗する可能性があることに注意してください。 -Dは遅くなりはしますが、より安全です。
データを明示的に列名を付けたINSERTコマンド(INSERT INTO table (column, ...) VALUES...)としてダンプします。 これによりリストアは非常に遅くなります。 主にPostgreSQL以外のデータベースへロード可能なダンプを作成する時に有用です。
出力を指定のファイルに送ります。 省略時は標準出力が使用されます。
出力形式を選択します。 formatは以下の値のいずれかです。
プレインテキストのSQLスクリプトファイルを出力します(デフォルト)。
pg_restoreへの入力に適したtarアーカイブを出力します。 このアーカイブ形式では、並び替えやデータベースオブジェクトを除外するデータベースのリストアを行なうことができます。 また、リストア時にデータを選択してリロードすることもできます。
pg_restoreへの入力に適したカスタムアーカイブを出力します。 これは、もっとも柔軟な形式であり、オブジェクト定義もロードするデータも並び替えることができます。 また、この形式はデフォルトで圧縮されます。
pg_dumpとデータベースサーバのバージョンの不一致を無視します。
pg_dumpは、前のリリースのPostgreSQLデータベースも処理できますが、(現時点では7.0より前の)非常に古いバージョンのデータベースの処理はできません。 バージョンチェックを無効にする必要がある場合に、このオプションを使います(もしpg_dumpが失敗したとしても、警告されなかったとは言えませんよ)。
schemaの内容のみをダンプします。 このオプションが指定されなければ、対象データベース内にあるシステム以外のスキーマ全てがダンプされます。
注意: このモードでは、pg_dumpは選択したスキーマ内のオブジェクトが依存する可能性がある他のデータベースオブジェクトのダンプを行いません。 従って、スキーマ単体のダンプの結果を初期化されたデータベースに正常にリストアできるかどうかの保証はありません。
各テーブルのオブジェクト識別子(OID)をデータの一部としてダンプします。 アプリケーションでOID列を(外部キー制約など)何らかの形で使用している場合は、このオプションを使用してください。 その他の場合は、このオプションは使用しないでください。
オブジェクトの所有権を元のデータベースに一致させるためのコマンドを出力しません。 デフォルトでpg_dumpは、ALTER OWNERまたはSET SESSION AUTHORIZATION文を発行して、作成したデータベースオブジェクトの所有権を設定します。 スーパーユーザ(もしくは、そのスクリプト内の全てのオブジェクトを所有するユーザ)で起動させずに、このスクリプトを実行すると、これらの文は失敗します。 任意のユーザがリストアできるスクリプトを作成するためには、-Oを指定してください。 ただし、この場合は全てのオブジェクトの所有者は、そのリストアしたユーザとなってしまいます。
このオプションは、プレインテキスト形式の場合にのみ意味があります。 アーカイブ形式では、pg_restoreを呼び出す時にこのオプションを指定することができます。
このオプションは廃止となりましたが、後方互換のためにまだ受け付けられます。
データ定義(スキーマ)のみをダンプし、データはダンプしません。
トリガを無効にする場合に使用する、スーパーユーザのユーザ名を指定します。 これは--disable-triggersを使用する場合にのみ該当します。 (通常は これを付けずにスーパーユーザとして結果スクリプトを開始する方が良いでしょう。)
tableのデータのみをダンプします。 同じ名前のテーブルが異なるスキーマに複数存在することがあり、この場合、一致する全てのテーブルがダンプされます。 1テーブルのみを選択するには、--schemaと--tableの両方を指定してください。
注意: このモードでは、pg_dumpは選択したテーブル内のオブジェクトが依存する可能性がある他のデータベースオブジェクトのダンプを行いません。 従って、テーブル単体のダンプの結果を初期化されたデータベースに正常にリストアできるかどうかの保証はありません。
冗長モードを指定します。 これを指定すると、pg_dumpは、詳細なオブジェクトコメント、開始時刻、終了時刻をダンプファイルに、そして、進行状況メッセージを標準エラーに出力します。
アクセス権限(grant/revokeコマンド)のダンプを抑制します。
このオプションは、関数本体用のドル引用符の使用を無効にし、強制的に標準SQLの文字列構文を使用した引用符付けを行います。
このオプションは、データのみのダンプを作成する場合だけに該当します。 データのリロード中に、pg_dumpが対象とするテーブル上のトリガを一時的に使用不可にするためのコマンドを含めるよう指示します。 このオプションは、参照整合性検査やデータのリロード中には呼び出されないようにしたいテーブル上のその他のトリガがある場合に使用します。
現在のところ、--disable-triggersを指定してコマンドを実行するのは、スーパーユーザでなければなりません。 そのため、ユーザは-Sでスーパーユーザを指定するか、あるいは望ましい方法として、スーパーユーザとして注意してスクリプトの残りを開始する必要があります。
このオプションは、プレインテキスト形式の場合にのみ意味があります。 他の形式では、pg_restoreを呼び出す時にこのオプションを指定することができます。
OWNER TOコマンドの代わりに標準SQLのSET SESSION AUTHORIZATIONコマンドを出力します。 これにより、ダンプの標準への互換性が高まりますが、ダンプ内のオブジェクトの履歴によっては正しくリストアされない可能性があります。
圧縮をサポートするアーカイブ形式で使用する、圧縮レベルを指定します(現時点では、カスタムアーカイブ形式のみが圧縮をサポートしています)。
以下のコマンドラインオプションは、データベース接続パラメータを制御します。
サーバが稼働しているマシンのホスト名を指定します。 この値がスラッシュから始まる場合、Unixドメインソケット用のディレクトリとして使用されます。 デフォルトは設定されていればPGHOST環境変数から取られます。 設定されていなければ、Unixドメインソケット接続と仮定されます。
サーバが接続を監視するTCPポートもしくはローカルUnixドメインソケットファイルの拡張子を指定します。 ポート番号のデフォルトは、設定されている場合、PGPORT環境変数の値となり、設定されていなければコンパイル時のデフォルト値となります。
指定したユーザとして接続します。
強制的にパスワードのプロンプトを表示します。 これは、パスワード認証が必要なサーバの場合、自動的に行なわれます。
データベースクラスタにおいてtemplate1データベースに対しローカルな変更を行っている場合、pg_dumpの出力を、本当に空のデータベースにリストアするように注意してください。 さもないと、おそらく追加されたオブジェクトの重複定義によるエラーが発生します。 ローカルな追加が含まれない、空のデータベースを作成するには、template1からではなくtemplate0からコピーしてください。 以下に例を示します。
CREATE DATABASE foo WITH TEMPLATE template0;
pg_dumpにはいくつかの制限があります。
1つのテーブルのダンプ、もしくは、プレインテキストでのダンプの場合、pg_dumpはラージオブジェクトを取り扱いません。 ラージオブジェクトは、非テキストアーカイブ形式の1つを使用して、データベース全体としてダンプする必要があります。
--disable-triggersオプションを使用し、データのみのダンプを行なう場合、pg_dumpはデータを挿入する前にユーザテーブルにトリガを無効とするための問い合わせを出力し、そしてデータが挿入されるとそれらを再び有効にするための問い合わせを出力します。 リストアが途中で停止してしまった場合、システムカタログは間違った状態のままになっているかもしれません。
tarアーカイブのメンバのサイズは、8GB未満に制限されています。 (これはtarファイル形式が本来持っている制限です。) そのため、いずれか一つのテーブルのテキスト表現がこのサイズを越える場合には、この形式は使用できません。 tarアーカイブとその他の出力形式の合計サイズには制限がありません。 ただしオペレーティングシステムによる制限がある場合があります。
pg_dumpが生成するダンプファイルには、オプティマイザが問い合わせ計画を決定する際に使用される統計情報が含まれていません。 そのため、優れた性能を維持できるように、ダンプファイルからリストアした後にANALYZEを実行することを勧めます。