pg_dumpallはクラスタの全てのPostgreSQLデータベースを、1つのスクリプトファイルに書き出す("ダンプする")ためのユーティリティです。 スクリプトファイルには、データベースのリストアのためにpsqlへの入力として使うことのできるSQLコマンドが含まれています。 リストアはクラスタ内の各データベースに対してpg_dumpを呼び出すことで行われます。 さらに、pg_dumpallは、全てのデータベースに共通するグローバルオブジェクトもダンプします (pg_dumpはこれらのオブジェクトを保存しません)。 現時点では、これにはデータベースユーザとグループ、データベース全体に適用するアクセス制限に関する情報が含まれています。
pg_dumpallは全てのデータベースからテーブルを読み込むため、完全なダンプを作成するには、おそらくデータベーススーパーユーザとして接続する必要があると思われます。 さらに、ユーザとグループを追加したり、データベースを作成したりするので、保存されたスクリプトを実行するにはスーパーユーザ権限が必要になるでしょう。
SQLスクリプトは標準出力に書き込まれます。それをファイルにリダイレクトするためには、シェルの演算子を使います。
pg_dumpallは、PostgreSQLサーバに何度か接続しなければなりません(データベースごとに接続することになります)。 パスワード認証を使用している場合、その度にパスワード入力が促されます。 そのような場合は~/.pgpassファイルを用意しておくと便利です。 詳細は項30.13を参照してください。
以下のコマンドラインオプションは内容や出力形式を制御します。
データのみをダンプし、スキーマ(データ定義)をダンプしません。
データベースを再作成するコマンドの前に、データベースのクリーンアップ(削除)するコマンドを書き出します。 ロールおよびテーブル空間用のDROPコマンドも同様に追加されます。
データを(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_dumpallに指示します。 このオプションは、データのリロード中には呼び出したくない参照整合性検査やその他のトリガがテーブル上にある場合に使用します。
現在のところ、--disable-triggersを指定してコマンドを実行するのは、スーパーユーザでなければなりません。 そのため、ユーザは-Sでスーパーユーザを指定するか、あるいは、十分に注意してスーパーユーザ権限でスクリプトを開始する必要があります(後者の方がより望ましい方法です)。
ALTER OWNERコマンドの代わりに標準SQLのSET SESSION AUTHORIZATIONコマンドを出力します。 これにより、ダンプの標準への互換性が高まりますが、ダンプ内のオブジェクトの履歴によっては正しくリストアされない可能性があります。
以下のコマンドラインオプションは、データベース接続パラメータを制御します。
データベースサーバが稼働しているマシンのホスト名を指定します。 この値がスラッシュから始まる場合、Unixドメインソケット用のディレクトリとして使用されます。 デフォルトは、設定されていればPGHOST環境変数から取得されます。設定されていなければ、Unixドメインソケット接続と仮定されます。
グローバルオブジェクトをダンプし、他のどのデータベースをダンプすべきかを見つけるために接続するデータベースの名前を指定します。 指定されなかった場合、"postgres"が使用されます。 もしこれも存在しない場合は"template1"が使用されます。
サーバが接続を監視するTCPポートもしくはローカルUnixドメインソケットファイルの拡張子を指定します。 デフォルトは、設定されている場合、PGPORT環境変数の値になります。設定されていなければ、コンパイル時のデフォルト値となります。
接続ユーザ名です。
データベースに接続する前に、pg_dumpallは強制的にパスワード入力を促します。
サーバがパスワード認証を要求する場合pg_dumpallは自動的にパスワード入力を促しますので、これが重要になることはありません。 しかし、pg_dumpallは、サーバにパスワードが必要かどうかを判断するための接続試行を無駄に行います。 こうした余計な接続試行を防ぐために-Wの入力が有意となる場合もあります。
パスワードの入力はダンプするデータベース毎に繰り返し促されます。 通常は、手作業のパスワード入力に依存するよりも~/.pgpassを設定する方が良いでしょう。
デフォルトの接続パラメータです。
また、このユーティリティは、他のほとんどのPostgreSQLユーティリティと同様、libpqでサポートされる環境変数を使用します(項30.12を参照してください)。
pg_dumpallは、内部でpg_dumpを呼び出すので、診断メッセージの一部ではpg_dumpを参照しています。
オプティマイザが正確な統計情報を使用できるように、リストア後は、リストアしたテーブルそれぞれに対してANALYZEを実行することを勧めます。 また、vacuumdb -a -zを実行すると、全てのデータベースを解析することができます。
pg_dumpallでは、必要なテーブル空間用のディレクトリがリストア前に存在していることを要求します。 存在しないと、デフォルト以外の場所にあるデータベースに関して、そのデータベース生成が失敗します。