★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

pg_dumpall

名前

pg_dumpall -- PostgreSQLデータベースクラスタをスクリプトファイルへ抽出

概要

pg_dumpall [option...]

説明

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を参照してください。

オプション

以下のコマンドラインオプションは内容や出力形式を制御します。

-a
--data-only

データのみをダンプし、スキーマ(データ定義)をダンプしません。

-c
--clean

再作成を行なう前にデータベースを掃除(削除)するためのSQLコマンドを含めます。

-d
--inserts

データを(COPYではなく)INSERTコマンドとしてダンプします。 これを行うとリストアが非常に遅くなります。 これは主にPostgreSQL以外のデータベースにロードできるダンプを作成する時に役に立ちます。 列の順序を変更した場合はリストアが失敗するかもしれないことに注意してください。 更に低速になりますが、-Dオプションの方が安全です。

-D
--column-inserts
--attribute-inserts

データを明示的に列名を付けたINSERTコマンド(INSERT INTO table (column, ...) VALUES...)としてダンプします。 これによりリストアは非常に遅くなります。 これは主に、PostgreSQL以外のデータベースにロードできるダンプを作成する時に役に立ちます。

-g
--globals-only

グローバルオブジェクト(ユーザとグループ)のみをダンプし、データベースのダンプを行ないません。

-i
--ignore-version

pg_dumpallとデータベースサーバのバージョンの不一致を無視します。

pg_dumpallは、前のリリースのPostgreSQLデータベースを扱うことができますが、非常に古いバージョン(現時点では7.0より前のバージョン)はサポートしていません。 バージョンチェックを無効にする必要がある場合には、このオプションを使います(もしpg_dumpallが失敗したとしても、警告されなかったとは言えませんよ)。

-o
--oids

各テーブルのオブジェクト識別子(OID)をデータの一部としてダンプします。 アプリケーションでOID列を(外部キー制約など)何らかの形で使用している場合は、このオプションを使用してください。 その他の場合は、このオプションは使用しないでください。

-O
--no-owner

元のデータベースに一致するようにオブジェクトの所有権を設定するコマンドを出力しません。 デフォルトでは、pg_dumpallALTER OWNERまたはSET SESSION AUTHORIZATIONを発行して作成したスキーマ要素の所有権を設定します。 この文は、スーパーユーザ(もしくは、スクリプト内の全てのオブジェクトを所有するユーザと同じユーザ)でこのプログラムの実行を始めない限り失敗します。 全てのオブジェクトの所有権をそのユーザに与えることになりますが、任意のユーザがリストアできるスクリプトを作成するには、-Oを指定してください。

-s
--schema-only

オブジェクト定義(スキーマ)のみをダンプし、データをダンプしません。

-S username
--superuser=username

トリガを無効にする際に使用するスーパーユーザのユーザ名を指定してください。 これは--disable-triggersが使用された場合にのみ重要です。 (通常は、これを使用せずに、結果のスクリプトをスーパーユーザで起動するほうがよいでしょう。)

-v
--verbose

冗長モードを指定します。 これを指定すると、pg_dumpallは開始時刻と終了時刻をダンプファイルに、進行メッセージを標準エラーに出力するようになります。 また、これによりpg_dumpの冗長出力を有効にします。

-x
--no-privileges
--no-acl

アクセス権限のダンプ(grant/revokeコマンド)を行いません。

-X disable-dollar-quoting
--disable-dollar-quoting

このオプションは、関数本体向けのドル引用符付けの使用を無効にし、強制的に標準SQLの文字列構文を使用した引用符付けを行います。

-X disable-triggers
--disable-triggers

このオプションは、データのみのダンプを作成する場合だけに該当します。 データのリロード中に、pg_dumpが対象とするテーブル上のトリガを一時的に使用不可にするためのコマンドを含めるよう指示します。 このオプションは、参照整合性検査やデータのリロード中には呼び出されないようにしたいテーブル上のその他のトリガがある場合に使用します。

現在のところ、--disable-triggersを指定してコマンドを実行するのは、スーパーユーザでなければなりません。 そのため、ユーザは-Sでスーパーユーザを指定するか、あるいは望ましい方法として、スーパーユーザとして注意してスクリプトの残りを開始する必要があります。

-X use-set-session-authorization
--use-set-session-authorization

OWNER TOコマンドの代わりに標準SQLのSET SESSION AUTHORIZATIONコマンドを出力します。 これにより、ダンプの標準への互換性が高まりますが、ダンプ内のオブジェクトの履歴によっては正しくリストアされない可能性があります。

以下のコマンドラインオプションは、データベース接続パラメータを制御します。

-h host

データベースサーバが稼働しているマシンのホスト名を指定します。 この値がスラッシュから始まる場合、Unixドメインソケット用のディレクトリとして使用されます。 設定されている場合、デフォルトはPGHOST環境変数から取得されますが、そうでない場合はUnixドメインソケット接続を試みます。

-p port

サーバが接続を監視しているTCPポートもしくはローカルUnixドメインソケットファイルの拡張子を指定します。 デフォルトは、設定されている場合はPGPORT環境変数、またはコンパイルの際のデフォルトになります。

-U username

指定したユーザとして接続します。

-W

強制的にパスワードのプロンプトを表示します。 これは、パスワード認証が必要なサーバの場合、自動的に行なわれます。

環境

PGHOST
PGPORT
PGUSER

デフォルトの接続パラメータです。

注釈

pg_dumpallは、内部でpg_dumpを呼び出すので、診断メッセージの一部はpg_dumpを参照します。

オプティマイザが有用な統計情報を持つように、リストアした後にリストアしたテーブルそれぞれに対してANALYZEを実行することを勧めます。 また、vacuumdb -a -zを実行することで全てのデータベースを解析することができます。

全てのデータベースを書き出す場合、以下のようにします。

$ pg_dumpall > db.out

上記で書き出したデータベースを読み込む場合、以下のようにします。

$ psql -f db.out template1

(ここではどのデータベースに接続するかということは重要ではありません。 なぜならpg_dumpallが作成するスクリプトファイルは、保存されたデータベースの作成および接続のためのコマンドを含んでいるからです。)

関連項目

pg_dump。 起こり得るエラー条件についての詳細はこちらを参照してください。