pg_dumpallはクラスタの全てのPostgreSQLデータベースを、1 つのスクリプトファイルに書き出す("ダンプする")ためのユーティリティです。 スクリプトファイルには、データベースをリストアするためのpsqlへの入力として使うことのできるSQLコマンドが含まれています。 これはクラスタ内の各データベースに対してpg_dumpを呼び出すことによって行なわれます。 pg_dumpallは更に、全てのデータベースに共通するグローバルオブジェクトもダンプします。 (pg_dumpはこれらのオブジェクトを保存しません。) 現時点では、これにはデータベースユーザとグループ、データベース全体に適用するアクセス制限に関する情報が含まれています。
従って、pg_dumpallはデータベースのバックアップをとるための統合的な解決策です。 しかし、次の制限には注意してください。 pg_dumpが"ラージオブジェクト"をテキストファイルにダンプできないため、pg_dumpallも同様にダンプできません。 ラージオブジェクトを含むデータベースがある場合、pg_dumpの非テキスト出力モードの1つを使用してダンプしなければなりません。
pg_dumpallは全てのデータベースからテーブルを読み込むため、完全なダンプを作成するためにはデータベーススーパーユーザとして接続しなければならないでしょう。 さらに、ユーザとグループを追加するため、そしてデータベースを作成するために、保存されたスクリプトを実行するにはスーパーユーザ権限が必要になるでしょう。
SQL スクリプトは標準出力に書き込まれます。それをファイルにリダイレクトするためには、シェルの演算子を使います。
pg_dumpallは、PostgreSQLサーバに何度も(データベース毎に一回)接続しなければなりません。 パスワード認証を使用している場合、その度にパスワードが必要になります。 そのような場合には~/.pgpassファイルを用意しておくと便利です。 詳細は項27.12を参照してください。
以下のコマンドラインオプションは内容や出力形式を制御します。
データのみをダンプし、スキーマ(データ定義)をダンプしません。
再作成を行なう前にデータベースを掃除(削除)するためのSQLコマンドを含めます。
データを(COPYではなく)INSERTコマンドとしてダンプします。 これを行うとリストアが非常に遅くなります。 これは主にPostgreSQL以外のデータベースにロードできるダンプを作成する時に役に立ちます。 列の順序を変更した場合はリストアが失敗するかもしれないことに注意してください。 更に低速になりますが、-Dオプションの方が安全です。
データを明示的に列名を付けたINSERTコマンド(INSERT INTO table (column, ...) VALUES...)としてダンプします。 これによりリストアは非常に遅くなります。 これは主に、PostgreSQL以外のデータベースにロードできるダンプを作成する時に役に立ちます。
グローバルオブジェクト(ユーザとグループ)のみをダンプし、データベースのダンプを行ないません。
pg_dumpallとデータベースサーバのバージョンの不一致を無視します。
pg_dumpallは、前のリリースのPostgreSQLデータベースを扱うことができますが、非常に古いバージョン(現時点では7.0より前のバージョン)はサポートしていません。 バージョンチェックを無効にする必要がある場合には、このオプションを使います(もしpg_dumpallが失敗したとしても、警告されなかったとは言えませんよ)。
各テーブルのオブジェクト識別子(OID)をデータの一部としてダンプします。 アプリケーションでOID列を(外部キー制約など)何らかの形で使用している場合は、このオプションを使用してください。 その他の場合は、このオプションは使用しないでください。
元のデータベースに一致するようにオブジェクトの所有権を設定するコマンドを出力しません。 デフォルトでは、pg_dumpallはALTER OWNERまたはSET SESSION AUTHORIZATIONを発行して作成したスキーマ要素の所有権を設定します。 この文は、スーパーユーザ(もしくは、スクリプト内の全てのオブジェクトを所有するユーザと同じユーザ)でこのプログラムの実行を始めない限り失敗します。 全てのオブジェクトの所有権をそのユーザに与えることになりますが、任意のユーザがリストアできるスクリプトを作成するには、-Oを指定してください。
オブジェクト定義(スキーマ)のみをダンプし、データをダンプしません。
トリガを無効にする際に使用するスーパーユーザのユーザ名を指定してください。 これは--disable-triggersが使用された場合にのみ重要です。 (通常は、これを使用せずに、結果のスクリプトをスーパーユーザで起動するほうがよいでしょう。)
冗長モードを指定します。 これを指定すると、pg_dumpallは開始時刻と終了時刻をダンプファイルに、進行メッセージを標準エラーに出力するようになります。 また、これによりpg_dumpの冗長出力を有効にします。
アクセス権限のダンプ(grant/revokeコマンド)を行いません。
このオプションは、関数本体向けのドル引用符付けの使用を無効にし、強制的に標準SQLの文字列構文を使用した引用符付けを行います。
このオプションは、データのみのダンプを作成する場合だけに該当します。 データのリロード中に、pg_dumpが対象とするテーブル上のトリガを一時的に使用不可にするためのコマンドを含めるよう指示します。 このオプションは、参照整合性検査やデータのリロード中には呼び出されないようにしたいテーブル上のその他のトリガがある場合に使用します。
現在のところ、--disable-triggersを指定してコマンドを実行するのは、スーパーユーザでなければなりません。 そのため、ユーザは-Sでスーパーユーザを指定するか、あるいは望ましい方法として、スーパーユーザとして注意してスクリプトの残りを開始する必要があります。
OWNER TOコマンドの代わりに標準SQLのSET SESSION AUTHORIZATIONコマンドを出力します。 これにより、ダンプの標準への互換性が高まりますが、ダンプ内のオブジェクトの履歴によっては正しくリストアされない可能性があります。
以下のコマンドラインオプションは、データベース接続パラメータを制御します。
データベースサーバが稼働しているマシンのホスト名を指定します。 この値がスラッシュから始まる場合、Unixドメインソケット用のディレクトリとして使用されます。 設定されている場合、デフォルトはPGHOST環境変数から取得されますが、そうでない場合はUnixドメインソケット接続を試みます。
サーバが接続を監視しているTCPポートもしくはローカルUnixドメインソケットファイルの拡張子を指定します。 デフォルトは、設定されている場合はPGPORT環境変数、またはコンパイルの際のデフォルトになります。
指定したユーザとして接続します。
強制的にパスワードのプロンプトを表示します。 これは、パスワード認証が必要なサーバの場合、自動的に行なわれます。
pg_dumpallは、内部でpg_dumpを呼び出すので、診断メッセージの一部はpg_dumpを参照します。
オプティマイザが有用な統計情報を持つように、リストアした後にリストアしたテーブルそれぞれに対してANALYZEを実行することを勧めます。 また、vacuumdb -a -zを実行することで全てのデータベースを解析することができます。