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