3.6. SQL ダンプを使用した PostgreSQL データのバックアップ
SQL ダンプのメソッドは、SQL コマンドを使用したダンプファイルの生成に基づいています。ダンプがデータベースサーバーにアップロードされると、ダンプ時と同じ状態でデータベースが再作成されます。
SQL ダンプは、以下の PostgreSQL クライアントアプリケーションによって保証されます。
-
pg_dump
は、ロールまたはテーブルスペースに関するクラスター全体の情報なしに単一のデータベースをダンプします。 -
pg_dumpall
は、指定されたクラスター内の各データベースをダンプし、ロールやテーブルスペースの定義など、クラスター全体のデータを保持します。
デフォルトでは、pg_dump
コマンドおよび pg_dumpall
コマンドは、結果を標準出力に書き込みます。ダンプをファイルに保存するには、出力を SQL ファイルにリダイレクトします。作成される SQL ファイルは、テキスト形式またはその他の形式のいずれかになります。これにより並列処理が可能になり、オブジェクトの復元をより詳細に制御できます。
データベースにアクセスできる任意のリモートホストから、SQL ダンプを実行できます。
3.6.1. SQL ダンプの長所と短所 リンクのコピーリンクがクリップボードにコピーされました!
SQL ダンプには、他の PostgreSQL バックアップ方法と比較して、以下の長所があります。
-
SQL ダンプは、サーバーのバージョン固有ではない唯一の PostgreSQL バックアップメソッドです。
pg_dump
ユーティリティーの出力は、PostgreSQL の後続のバージョンにリロードできます。これは、ファイルシステムレベルのバックアップ、または継続的なアーカイブにはできません。 - SQL ダンプは、32 ビットサーバーから 64 ビットサーバーへなど、異なるアーキテクチャーにデータベースを転送する際に有効な唯一の方法です。
-
SQL ダンプは、内部的に一貫性のあるダンプを提供します。ダンプは、
pg_dump
の実行開始時のデータベースのスナップショットを表します。 -
pg_dump
ユーティリティーは、実行中のデータベースの他の操作をブロックしません。
SQL ダンプの短所は、ファイルシステムレベルのバックアップと比較して時間がかかることです。
3.6.2. pg_dump を使用して SQL ダンプを実行する リンクのコピーリンクがクリップボードにコピーされました!
クラスター全体の情報なしに単一のデータベースをダンプするには、pg_dump
ユーティリティーを使用します。
前提条件
-
ダンプするすべてのテーブルへの読み取りアクセスが必要です。データベース全体をダンプするには、
postgres
のスーパーユーザーまたはデータベースの管理者特権を持つユーザーとして、コマンドを実行する必要があります。
手順
クラスター全体の情報なしでデータベースをダンプします。
pg_dump <db_name> > <dump_file>
$ pg_dump <db_name> > <dump_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pg_dump
が接続するデータベースサーバーを指定するには、以下のコマンドラインオプションを使用します。ホストを定義する
-h
オプションデフォルトのホストは、ローカルホストか、
PGHOST
環境変数で指定されているものです。ポートを定義する
-p
オプションデフォルトのポートは、
PGPORT
環境変数またはコンパイル済みデフォルトで示されます。
3.6.3. pg_dumpall を使用して SQL ダンプを実行する リンクのコピーリンクがクリップボードにコピーされました!
特定のデータベースクラスター内の各データベースをダンプし、クラスター全体のデータを保持するには、pg_dumpall
ユーティリティーを使用します。
前提条件
-
postgres
スーパーユーザーまたはデータベースの管理者特権を持つユーザーとして、コマンドを実行する必要があります。
手順
データベースクラスターのすべてのデータベースをダンプし、クラスター全体のデータを保存します。
pg_dumpall > <dump_file>
$ pg_dumpall > <dump_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pg_dumpall が接続するデータベースサーバーを指定するには、以下のコマンドラインオプションを使用します。
ホストを定義する
-h
オプションデフォルトのホストは、ローカルホストか、
PGHOST
環境変数で指定されているものです。ポートを定義する
-p
オプションデフォルトのポートは、
PGPORT
環境変数またはコンパイル済みデフォルトで示されます。デフォルトのデータベースを定義する
-l
オプションこのオプションにより、初期化時に自動的に作成された
postgres
データベースとは異なるデフォルトのデータベースを選択できます。
3.6.4. pg_dump を使用してダンプされたデータベースの復元 リンクのコピーリンクがクリップボードにコピーされました!
pg_dump
ユーティリティーを使用してダンプした SQL ダンプからデータベースを復元するには、以下の手順に従います。
前提条件
-
postgres
スーパーユーザーまたはデータベースの管理者特権を持つユーザーとして、コマンドを実行する必要があります。
手順
新しいデータベースを作成します。
createdb <db_name>
$ createdb <db_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ダンプされたデータベースのオブジェクトを所有するか、オブジェクトに対するパーミッションが許可されたユーザーがすべて存在していることを検証してください。このようなユーザーが存在しない場合、復元は元の所有権とパーミッションでオブジェクトの再作成に失敗します。
psql
ユーティリティーを実行して、pg_dump
ユーティリティーが作成したテキストファイルのダンプを復元します。psql <db_name> < <dump_file>
$ psql <db_name> < <dump_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでの
<dump_file>
は、pg_dump
コマンドの出力になります。非テキストファイルのダンプを復元するには、代わりにpg_restore
ユーティリティーを使用します。pg_restore <non-plain_text_file>
$ pg_restore <non-plain_text_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.6.5. pg_dumpall を使用してダンプされたデータベースの復元 リンクのコピーリンクがクリップボードにコピーされました!
pg_dumpall
ユーティリティーを使用してダンプしたデータベースクラスターからデータを復元するには、以下の手順に従います。
前提条件
-
postgres
スーパーユーザーまたはデータベースの管理者特権を持つユーザーとして、コマンドを実行する必要があります。
手順
- ダンプされたデータベースのオブジェクトを所有するか、オブジェクトに対するパーミッションが許可されたユーザーがすべて、すでに存在していることを検証してください。このようなユーザーが存在しない場合、復元は元の所有権とパーミッションでオブジェクトの再作成に失敗します。
psql
ユーティリティーを実行して、pg_dumpall
ユーティリティーにより作成されたテキストファイルのダンプを復元します。psql < <dump_file>
$ psql < <dump_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでの
<dump_file>
は、pg_dumpall
コマンドの出力になります。
3.6.6. 別のサーバーでのデータベースの SQL ダンプの実行 リンクのコピーリンクがクリップボードにコピーされました!
pg_dump
および psql
はパイプに対する読み書きが可能であるため、あるサーバーから別のサーバーにデータベースを直接ダンプできます。
手順
データベースを、サーバーから別のサーバーにダンプするには、以下のコマンドを実行します。
pg_dump -h <host_1> <db_name> | psql -h <host_2> <db_name>
$ pg_dump -h <host_1> <db_name> | psql -h <host_2> <db_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.6.7. 復元中の SQL エラーの処理 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、SQL エラーが発生した場合、psql
は実行を継続します。これにより、データベースの復元は一部のみとなります。
デフォルトの動作を変更するには、ダンプを復元する際に以下のいずれかの方法を使用します。
前提条件
-
postgres
スーパーユーザーまたはデータベースの管理者特権を持つユーザーとして、コマンドを実行する必要があります。
手順
ON_ERROR_STOP
変数を設定して SQL エラーが発生した場合は、終了ステータス 3 でpsql
を終了します。psql --set ON_ERROR_STOP=on <db_name> < <dump_file>
$ psql --set ON_ERROR_STOP=on <db_name> < <dump_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ダンプ全体が単一のトランザクションとして復元されるように指定して、復元が完全に完了するかキャンセルされるようにします。
psql
ユーティリティーを使用してテキストファイルのダンプを復元する場合:psql -1
$ psql -1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pg_restore
ユーティリティーを使用してテキストファイル以外のダンプを復元する場合:pg_restore -e
$ pg_restore -e
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
この方法を使用する場合、小さなエラーでも、すでに何時間も実行されている復元操作がキャンセルされる可能性があることに注意してください。