PG_DUMPALL(1)

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

SYNOPSIS

pg_dumpall [ option... ]

説明

pg_dumpallはクラスタの全てのPostgreSQLデータベースを、1 つのスクリプトファイルに書き出す(``ダンプする'')ためのユーティリティです。 スクリプトファイルには、データベースをリストアするためのpsql(1)への入力として使うことのできるSQLコマンドが含まれています。 これはクラスタ内の各データベースに対してpg_dump(1)を呼び出すことによって行なわれます。 pg_dumpallは更に、全てのデータベースに共通するグローバルオブジェクトもダンプします。 (pg_dumpはこれらのオブジェクトを保存しません。) 現時点では、これにはデータベースユーザとグループ、データベース全体に適用するアクセス制限に関する情報が含まれています。

従って、pg_dumpallはデータベースのバックアップをとるための統合的な解決策です。 しかし、次の制限には注意してください。 pg_dumpが``ラージオブジェクト''をテキストファイルにダンプできないため、pg_dumpallも同様にダンプできません。 ラージオブジェクトを含むデータベースがある場合、pg_dumpの非テキスト出力モードの1つを使用してダンプしなければなりません。

pg_dumpallは全てのデータベースからテーブルを読み込むため、完全なダンプを作成するためにはデータベーススーパーユーザとして接続しなければならないでしょう。 さらに、ユーザとグループを追加するため、そしてデータベースを作成するために、保存されたスクリプトを実行するにはスーパーユーザ権限が必要になるでしょう。

SQL スクリプトは標準出力に書き込まれます。それをファイルにリダイレクトするためには、シェルの演算子を使います。

pg_dumpallは、PostgreSQLサーバに何度も(データベース毎に一回)接続しなければなりません。 パスワード認証を使用している場合、その度にパスワードが必要になります。 そのような場合には~/.pgpassファイルを用意しておくと便利です。 詳細はthe documentationを参照してください。

オプション

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

-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_dumpallはALTER 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(1)。 起こり得るエラー条件についての詳細はこちらを参照してください。