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 サーバに何度も接続しなければなりません。その度にパスワードが必要になる場合があります。 そのような場合には $HOME/.pgpass ファイルを用意しておくと便利です。
以下のコマンドラインオプションを使用して、内容や出力形式を制御することができます。
データのみをダンプし、スキーマ(データ定義)をダンプしません。
再作成を行なう前にデータベースを掃除 (削除) するための SQL コマンドを含めます。
データを (COPY ではなく) INSERT コマンドとしてダンプします。 これを行うとリストアが非常に遅くなりますが、出力の他の SQL データベース管理システムへの移植性は高くなります。
データを明示的に列名を付けた INSERT コマンド (INSERT INTO table (column, ...) VALUES...) としてダンプします。 これによりリストアは非常に遅くなります。 しかし、列の順番を変更する場合にはこれが必要です。
グローバルオブジェクト (ユーザとグループ) のみをダンプし、データベースのダンプを行ないません。
pg_dumpall とデータベースサーバのバージョンの不一致を無視します。
pg_dumpall は、前のリリースのPostgreSQL データベースを扱うことができますが、非常に古いバージョン(現時点では7.0より前のバージョン)はサポートしていません。 バージョンチェックを無効にする必要がある場合には、このオプションを使います (もし pg_dumpall が失敗したとしても、警告されなかったとは言えませんよ)。
各テーブルのオブジェクト識別子 (OID) をダンプします。アプリケーションで OID 列を (外部キー制約など) 何らかの形で使用している場合は、このオプションを使用して下さい。その他の場合は、このオプションは使用しないで下さい。
スキーマ(データ定義)のみをダンプし、データをダンプしません。
冗長モードを指定します。 これを指定すると、pg_dumpall は進行メッセージを標準エラーに出力するようになります。
アクセス権限のダンプ(grant/revokeコマンド)を行いません。
以下のコマンドラインオプションは、データベース接続パラメータを制御します。
データベースサーバが稼働しているマシンのホスト名を指定します。 この値がスラッシュから始まる場合、Unix ドメインソケット用のディレクトリとして使用されます。 設定されている場合、デフォルトは環境変数 PGHOST から取得されますが、そうでない場合は Unix ドメインソケット接続を試みます。
サーバが接続を監視している TCP ポートもしくはローカル Unix ドメインソケットファイルの拡張子を指定します。 デフォルトは、設定されている場合は環境変数 PGPORT、またはコンパイルの際のデフォルトになります。
指定したユーザとして接続します。
強制的にパスワードのプロンプトを表示します。これは、パスワード認証が必要なサーバの場合、自動的に行なわれます。
pg_dumpall は、内部で pg_dump を呼び出すので、診断メッセージの一部は pg_dump を参照します。
オプティマイザが有用な統計情報を持つように、リストアした後にリストアしたテーブルそれぞれに対して ANALYZE を実行することを勧めます。 また、vacuumdb -a -z を実行することで全てのデータベースを解析することができます。