PostgreSQL 8.4.1文書
前のページ | 巻戻し |  | 早送り | 次のページ

# pg_dumpall

## 名前

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

## 概要

`pg_dumpall` [`option`...]

## 説明

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

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

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

pg_dumpallは、PostgreSQLサーバに何度か接続しなければなりません（データベースごとに接続することになります）。 パスワード認証を使用している場合、その度にパスワード入力が促されます。 そのような場合は`~/.pgpass`ファイルを用意しておくと便利です。 詳細は項30.14を参照してください。

## オプション

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

`-a`
`--data-only`

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

`-c`
`--clean`

  データベースを再作成するコマンドの前に、データベースのクリーンアップ（削除）するコマンドを書き出します。 ロールおよびテーブル空間用の`DROP`コマンドも同様に追加されます。

`-f `filename``
`--file=`filename``

  出力を指定したファイルに送ります。 これが省略されると標準出力が使用されます。

`-g`
`--globals-only`

  グローバルオブジェクト（ロールとテーブル空間）のみをダンプし、データベースのダンプを行いません。

`-i`
`--ignore-version`

  廃止されたオプションで、現在では無視されます。

`-o`
`--oids`

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

`-O`
`--no-owner`

  オブジェクトの所有権を元のデータベースに一致させるためのコマンドを出力しません。 デフォルトでは、pg_dumpallは`ALTER OWNER`文または`SET SESSION AUTHORIZATION`文を発行して作成したスキーマ要素の所有権を設定します。 スーパーユーザ（もしくは、スクリプト内の全てのオブジェクトを所有するユーザ）以外のユーザがスクリプトを実行した場合、これらの文は失敗します。 任意のユーザがリストアできるスクリプトを作成するには、`-O`を指定してください。ただし、この場合は、全てのオブジェクトの所有者がリストアしたユーザとなってしまいます。

`--lock-wait-timeout=`timeout``

  ダンプ開始時に共有テーブルロックの獲得のために永遠に待機しません。 代わりに指定した`timeout`の間にテーブルをロックすることができない場合は失敗します。 タイムアウトは`SET statement_timeout`で受け付けられる任意の書式で指定することができます。 （許される値はダンプ元のサーババージョンに依存して変わります。 しかし、7.3以降のすべてのバージョンでミリ秒単位の整数値は受け付けられます。 このオプションは7.3より前のサーバからダンプされた場合、無視されます。）

`--no-tablespaces`

  オブジェクト用にテーブル空間を作成または選択するコマンドを出力しません。 このオプションを付けると、すべてのオブジェクトはリストア時デフォルトであったテーブル空間内に作成されます。

`-r`
`--roles-only`

  ロールのみをダンプし、データベースやテーブル空間のダンプを行いません。

`-s`
`--schema-only`

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

`-S `username``
`--superuser=`username``

  トリガを無効にする際に使用するスーパーユーザのユーザ名を指定してください。 これは`--disable-triggers`を使用する場合にのみ使用されます （通常はこのオプションを使うよりも、出力されたスクリプトをスーパーユーザ権限で実行する方が良いでしょう）。

`-t`
`--tablespaces-only`

  テーブル空間のみをダンプし、データベースやロールのダンプを行いません。

`-v`
`--verbose`

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

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

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

`--binary-upgrade`

  このオプションは現位置でのアップグレード用のユーティリティにより使用されるものです。 他の目的での使用は推奨されませんし、サポートもされません。 このオプションの動作は、将来注意することなく変更される可能性があります。

`--inserts`

  データを（`COPY`ではなく）`INSERT`コマンドとしてダンプします。 これを行うとリストアが非常に遅くなります。 主にPostgreSQL以外のデータベースにロード可能なダンプを作成する時に有用です。 列の順序を変更した場合はリストアが失敗する可能性があることに注意してください。 さらに低速になりますが、`--column-inserts`オプションの方が安全です。

`--column-inserts`
`--attribute-inserts`

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

`--disable-dollar-quoting`

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

`--disable-triggers`

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

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

`--use-set-session-authorization`

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

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

`-h `host``
`--host=`host``

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

`-l `dbname``
`--database=`dbname``

  グローバルオブジェクトをダンプし、他のどのデータベースをダンプすべきかを見つけるために接続するデータベースの名前を指定します。 指定されなかった場合、"postgres"が使用されます。 もしこれも存在しない場合は"template1"が使用されます。

`-p `port``
`--port=`port``

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

`-U `username``
`--username=`username``

  接続ユーザ名です。

`-w`
`--no-password`

  パスワードの入力を促しません。 サーバがパスワード認証を必要とし、かつ、`.pgpass`ファイルなどの他の方法が利用できない場合、接続試行は失敗します。 バッチジョブやパスワードを入力するユーザが存在しない場合にこのオプションは有用かもしれません。。

`-W`
`--password`

  データベースに接続する前に、pg_dumpallは強制的にパスワード入力を促します。

  サーバがパスワード認証を要求する場合pg_dumpallは自動的にパスワード入力を促しますので、これが重要になることはありません。 しかし、pg_dumpallは、サーバにパスワードが必要かどうかを判断するための接続試行を無駄に行います。 こうした余計な接続試行を防ぐために`-W`の入力が有意となる場合もあります。

  パスワードの入力はダンプするデータベース毎に繰り返し促されます。 通常は、手作業のパスワード入力に依存するよりも`~/.pgpass`を設定する方が良いでしょう。

`--role=`rolename``

  ダンプを作成する際に使用するロール名を指定します。 このオプションによりpg_dumpallはデータベースに接続した後に`SET ROLE` `rolename`コマンドを発行するようになります。 認証に使用したユーザ（`-U`で指定されたユーザ）がpg_dumpallで必要とされる権限を持たないが、必要な権限を持つロールに切り替えることができる場合に有用です。 一部のインストレーションではスーパーユーザとして直接ログインさせないポリシーを取ることがありますが、このオプションを使用することでポリシーに反することなくダンプを作成することができます。

## 環境

`PGHOST`
`PGOPTIONS`
`PGPORT`
`PGUSER`

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

また、このユーティリティは、他のほとんどのPostgreSQLユーティリティと同様、libpqでサポートされる環境変数を使用します（項30.13を参照してください）。

## 注釈

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

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

pg_dumpallでは、必要なテーブル空間用のディレクトリがリストア前に存在していることを要求します。 存在しないと、デフォルト以外の場所にあるデータベースに関して、そのデータベース生成が失敗します。

## 例

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

    $ pg_dumpall > db.out

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

    $ psql -f db.out postgres

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

## 関連項目

考えられるエラーの原因については、pg_dumpを参照してください。

前のページ | ホーム | 次のページ
pg_dump | 上に戻る | pg_restore