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 -1Copy to Clipboard Copied! Toggle word wrap Toggle overflow pg_restoreユーティリティーを使用してテキストファイル以外のダンプを復元する場合:pg_restore -e
$ pg_restore -eCopy to Clipboard Copied! Toggle word wrap Toggle overflow
この方法を使用する場合、小さなエラーでも、すでに何時間も実行されている復元操作がキャンセルされる可能性があることに注意してください。