無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

pg_dumpall

名前

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

概要

pg_dumpall [ connection-option ...] [ option ...]

説明

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

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

SQLスクリプトは標準出力に書き込まれます。 それをファイルにリダイレクトするためには、[-f|file]オプションまたはシェルの演算子を使用して下さい。

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

オプション

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

-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 を指定してください。ただし、この場合は、全てのオブジェクトの所有者がリストアしたユーザとなってしまいます。

-r
--roles-only

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

-s
--schema-only

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

-S username
--superuser= username

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

-t
--tablespaces-only

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

-v
--verbose

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

-V
--version

pg_dumpall のバージョンを表示し、終了します。

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

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

--binary-upgrade

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

--column-inserts
--attribute-inserts

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

--disable-dollar-quoting

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

--disable-triggers

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

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

--inserts

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

--lock-wait-timeout= timeout

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

--no-security-labels

セキュリティラベルをダンプしません。

--no-tablespaces

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

--no-unlogged-table-data

ログを取らないテーブルの内容をダンプしません。 このオプションはテーブル定義(スキーマ)をダンプするかどうかには影響しません。 そのテーブルデータのダンプを抑制するだけです。

--quote-all-identifiers

強制的にすべての識別子に引用符を付与します。 追加のキーワードが導入されている可能性がある将来のバージョンへの移行用にデータベースをダンプする場合に有用かもしれません。

--use-set-session-authorization

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

-?
--help

pg_dumpall コマンドライン引数の使用方法を表示し、終了します。

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

-d connstr
--dbname= connstr

サーバに接続するために使用されるパラメータを接続文字列として指定します。 項31.1.1 を参照してください。

このオプションは、他のクライアントアプリケーションとの一貫性のために --dbname と呼ばれます。 しかし pg_dumpall は多くのデータベースに接続しなければなりませんので、接続文字列内のデータベース名は無視されます。 グローバルオブジェクトをダンプするために使用されるデータベースの名前を指定するため、または他のどのデータベースをダンプしなければならないかを見つけるためには -l を使用してください。

-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 でサポートされる環境変数を使用します( 項31.14 を参照してください)。

注釈

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


powered by SEO.CUG.NET