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 コマンドとしてダンプします。 これを行うとリストアが非常に遅くなりますが、出力の他の RDBMS パッケージへの移植性は高くなります。
データを明示的に列名を付けた INSERT コマンド (INSERT INTO table (column, ...) VALUES...) としてダンプします。これによりリストアは非常に遅くなります。 しかし、列の順番を変更する場合にはこれが必要です。
グローバルオブジェクト (ユーザとグループ) のみをダンプし、データベースのダンプを行ないません。
pg_dumpall とデータベースサーバのバージョンの不一致を無視します。
pg_dumpall は、バージョン 7.0 以上であれば前のリリースの PostgreSQL データベースも処理できますが、7.0 より古いバージョンのデータベースの処理はできません。 バージョンチェックを無効にする必要がある場合には、このオプションを使います (もし pg_dumpall が失敗したとしても、警告されなかったとは言えませんよ)。
各テーブルのオブジェクト識別子 (OID) をダンプします。アプリケーションで OID 列を (外部キー制約など) 何らかの形で使用している場合は、このオプションを使用して下さい。その他の場合は、このオプションは使用しないで下さい。
冗長モードを指定します。 これを指定すると、pg_dumpall は進行メッセージを標準エラーに出力するようになります。
以下のコマンドラインオプションは、データベース接続パラメータを制御します。
データベースサーバが稼働しているマシンのホスト名を指定します。ホスト名がスラッシュから始まる場合、Unix ドメインソケット用のディレクトリとして使用されます。設定されている場合、デフォルトは環境変数 PGHOST から取得されますが、そうでない場合は Unix ドメインソケット接続を試みます。
サーバが監視しているポート番号です。デフォルトは、設定されている場合は環境変数 PGPORT、またはコンパイルの際のデフォルトになります。
指定したユーザとして接続します。
強制的にパスワードのプロンプトを表示します。これは、パスワード認証が必要なサーバの場合、自動的に行なわれます。
長いオプション形式は限られたプラットホームでしか使用できません。
pg_dumpall は、内部で pg_dump を呼び出すので、診断メッセージの一部は pg_dump を参照します。
pg_dumpall は、PostgreSQL に何度も接続することが必要になります。 パスワード認証が構成されている場合は、接続の度にパスワードが要求されます。 そのような場合には、パスワードファイルを設定しておくと便利でしょう。