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 サーバに何度も接続しなければなりません。その度にパスワードが必要になる場合があります。 そのような場合には $HOME/.pgpass ファイルを用意しておくと便利です。

オプション

以下のコマンドラインオプションを使用して、内容や出力形式を制御することができます。

-a
--data-only

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

-c
--clean

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

-d
--inserts

データを (COPY ではなく) INSERT コマンドとしてダンプします。 これを行うとリストアが非常に遅くなりますが、出力の他の SQL データベース管理システムへの移植性は高くなります。

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

データを明示的に列名を付けた INSERT コマンド (INSERT INTO table (column, ...) VALUES...) としてダンプします。 これによりリストアは非常に遅くなります。 しかし、列の順番を変更する場合にはこれが必要です。

-g
--globals-only

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

-i
--ignore-version

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

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

-o
--oids

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

-s
--schema-only

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

-v
--verbose

冗長モードを指定します。 これを指定すると、pg_dumpall は進行メッセージを標準エラーに出力するようになります。

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

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

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

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