pg_dumpでデータをバックアップ|出力の4形式とそのリストア方法

※本サイトにはプロモーション・広告が含まれています。

(最終更新日:2023年9月)

✔このような方へ向けて書かれた記事となります

「pg_dumpコマンドの機能について詳しく知りたい」
「pg_dumpコマンドの使い方を習得したい」
「pg_dumpを活用した実践的な例が見たい」

✔当記事を通じてお伝えすること

  • pg_dumpコマンドの基本機能
  • pg_dumpコマンドの正しい使い方と応用方法
  • pg_dumpコマンドを使用した具体的な実例

当記事では、pg_dumpコマンドの基本から、オプションを駆使した高度な使い方まで、実例を交えて分かりやすく解説しています。

ぜひ最後までお読みください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

pg_dumpを理解するための前提知識

ここでは、PostgreSQLのデータベースバックアップツールである「pg_dump」を理解するための前提知識をお伝えしていきます。

前提の知識を確認のうえ、より詳しい解説へ進んでください。

  • バックアップの重要性
  • pg_dumpの役割と概要

バックアップの重要性

データは組織の重要な資産であり、その損失は業務の停止や法的な問題を引き起こす可能性があります。

したがって、定期的なデータバックアップは、企業のリスク管理において必要不可欠です。

また災害時やシステムの故障時には、データバックアップが事業の継続性を保証する唯一の手段となることもあります。

pg_dumpの役割と概要

pg_dumpは、PostgreSQLデータベースの内容をダンプ(出力)するためのユーティリティ

データベース全体または特定のテーブルの内容を、データベースとして再構築できる形式で出力します。

この出力をバックアップとして保存しておけば、データベースが損壊した場合でも情報を復元可能です。

pg_dumpは、データベースのバックアップや移行作業において非常に便利なツールといえるでしょう。

pg_dumpとpg_dumpallの違い

次に、「pg_dump」と「pg_dumpall」の違いについて解説します。

これらは、どちらもデータベースの内容をダンプするツールですが、使用するシーンや提供する機能に違いがあるのです。

  • 使用シーンの違い
  • コマンドオプションの違い

使用シーンの違い

pg_dumpとpg_dumpallの違いをまとめると以下のとおり。

  • pg_dump:単一のデータベースやその一部(テーブルやビューなど)をバックアップ
  • pg_dumpall:システム全体(すべてのデータベース、ユーザー、ロールなど)を一度にバックアップ

バックアップの対象範囲によって、pg_dumpとpg_dumpallのどちらを使用するかを選択してください。

コマンドオプションの違い

pg_dumpとpg_dumpallは、提供するコマンドオプションにも違いがあります。

  • pg_dump
  • pg_dumpall

pg_dump

データベースやテーブルの内容を各種形式で出力できます。

  • プレーンテキスト
  • カスタム
  • ディレクトリ
  • tar

さらに、データベース内の特定のオブジェクト(テーブルやビューなど)を選択的にダンプするためのオプションも提供します。

pg_dumpall

システム全体をバックアップするため、出力形式はプレーンテキストのみ

特定のオブジェクトを選択してダンプする機能はありません。

pg_dumpのインストールと設定

次に、「pg_dump」のインストール方法と設定について解説します。

pg_dumpを正しく機能させるためには、一部の設定が必要です。

  • PostgreSQLのインストール確認
  • pg_dumpが認識されない問題の解決

PostgreSQLのインストール確認

まずPostgreSQLが正しくインストールされているかを確認します。

pg_dumpは、PostgreSQLに同梱されているからです。

psql --version

PostgreSQLのバージョンが表示されることを確認します。

pg_dumpが認識されない問題の解決

pg_dumpがコマンドラインから認識されない場合、PATH環境変数を確認しましょう。

pg_dumpを使うには、PostgreSQLのバイナリが存在するディレクトリを追加しなければなりません。

  • Unix系のシステム:export PATH=$PATH:/path/to/postgres/bin
  • Windows:システムのプロパティから環境変数を追加・編集

pg_dumpの基本コマンド

ここでは、pg_dumpを使うための基本的なコマンドについて解説します。

これらのオプションを理解することで、pg_dumpの利用がより簡単になるでしょう。

  • -Uオプション:ユーザーの指定
  • –formatオプション:出力形式の選択
  • –fileオプション:出力ファイル名と拡張子の指定

-Uオプション:ユーザーの指定

-Uオプションは、データベースへの接続に使用するユーザー名を指定します。

データベースには、それぞれのユーザー名とパスワードが設定されており、これらを用いてアクセス可能。

pg_dumpコマンドを使用する際は、通常以下の形式で実行します。

pg_dump -U username dbname > dbname.sql

–formatオプション:出力形式の選択

出力形式は--formatオプションで指定します。

pg_dumpは4つの出力形式をサポートしており、それぞれ異なる目的や用途に合わせて利用可能です。

  • 4つの出力形式
  • 出力形式の使い分け

4つの出力形式

pg_dumpがサポートする4つの出力形式は以下の通りです。

  1. プレーンテキスト形式:.sql
    デフォルトの形式で、SQLコマンドがそのまま出力。この形式のファイルは、psqlコマンドで直接リストアできます。
  2. カスタム形式:.backupもしくは.dump
    pg_dump専用の形式で、pg_restoreコマンドを使ってリストアする必要があります。バックアップから特定のテーブルだけをリストアするなど、柔軟な操作が可能になります。
  3. ディレクトリ形式:拡張子なし
    出力を複数のファイルに分割。パラレルリストアが可能で、リストア時間を大幅に短縮できます。
  4. tar形式:.tar
    出力がtarアーカイブファイルとして保存されます。ディレクトリ形式と同様、複数のファイルに分割されますが、ひとつのアーカイブファイルにまとめられるため、取り扱いが容易です。

出力形式の使い分け

出力形式は用途によって選びます。

プレーンテキスト形式は簡易的でわかりやすいので、小規模なデータベースや初心者にはオススメです。

カスタム形式やディレクトリ形式は、大規模データベースの管理や、特定のテーブルだけをリストアしたい場合に適しています。

tar形式は、データの移動や共有を容易にしたいときに便利です。

–fileオプション:出力ファイル名と拡張子の指定

出力ファイル名は、–fileオプションで指定します。

出力ファイル名には拡張子も含まれますので、ファイル形式を明示することが可能です。

例えば以下のコマンドでは、dbname.sqlという名前のプレーンテキスト形式のバックアップファイルが作成されます。

pg_dump -U username --file=dbname.sql dbname

以下のコマンドでは、dbname.dumpという名前のカスタム形式のバックアップファイルが作成されます。

pg_dump -U username --format=c --file=dbname.dump dbname

実践:pg_dumpでのバックアップ方法

実際にpg_dumpを使ったバックアップ方法について学びましょう。

テスト環境の構築から始め、スクリプトファイル形式とアーカイブファイル形式の論理バックアップを試します。

  • テスト環境の構築
  • スクリプトファイル形式の論理バックアップ
  • アーカイブファイル形式の論理バックアップ

テスト環境の構築

まず、pg_dumpのバックアップを試すためのテスト環境を構築します。

適当な名前のデータベースを作成し、テスト用のテーブルとデータを挿入します。

こちらでは、test_dbというデータベースを作成し、その中にemployeesというテーブルを作成します。

以下のコマンドをpsqlで実行します。

CREATE DATABASE test_db;
\c test_db
CREATE TABLE employees (
id serial PRIMARY KEY,
name VARCHAR (100),
position VARCHAR (100),
hire_date DATE
);

以下のようにデータを挿入します。

INSERT INTO employees (name, position, hire_date) VALUES 
('John Doe', 'Manager', '2020-01-01'),
('Jane Smith', 'Developer', '2019-01-01'),
('Tom Brown', 'Developer', '2021-01-01');

これで、テスト環境が準備できました。

スクリプトファイル形式の論理バックアップ

次に、スクリプトファイル形式でのバックアップ方法を説明します。

  • データベース単位のバックアップ
  • テーブル単位のバックアップ

データベース単位のバックアップ

データベース全体をバックアップするには、以下のようなコマンドを使用します。

pg_dump -U username --file=test_db.sql test_db

このコマンドを実行すると、test_db.sqlという名前のSQLファイルが作成されます。

このファイルはテキストエディタで開くことができ、データベースのスキーマとデータがSQLコマンドが確認でるでしょう。

テーブル単位のバックアップ

特定のテーブルだけをバックアップするには、-tオプションを使ってテーブル名を指定します。

以下のコマンドはemployeesテーブルだけをバックアップするものです。

pg_dump -U username -t employees --file=employees.sql test_db

アーカイブファイル形式の論理バックアップ

次に、アーカイブファイル形式でのバックアップ方法を説明します。

  • データベース単位のバックアップ
  • テーブル単位のバックアップ

データベース単位のバックアップ

データベース全体をバックアップするには、以下のようなコマンドを使用します。

pg_dump -U username --format=c --file=test_db.dump test_db

このコマンドを実行すると、test_db.dumpという名前のダンプファイルが作成されます。

このファイルはバイナリ形式であり、テキストエディタでは開けません。

この形式のファイルはpg_restoreコマンドでリストアでき、リストアする際に柔軟な操作が可能です。

テーブル単位のバックアップ

特定のテーブルだけをバックアップするには、-tオプションを使ってテーブル名を指定します。

例えば、以下のコマンドはemployeesテーブルだけをバックアップします。

pg_dump -U username -t employees --format=c --file=employees.dump test_db

これで、指定したテーブルのみが含まれたダンプファイルが作成されます。

このダンプファイルもpg_restoreコマンドを使ってリストアすることが可能です。

リストア方法

バックアップしたデータを元に戻すためのリストアについて学びましょう。

バックアップ形式によって、リストアの方法も変わります。

  • スクリプトファイル形式のリストア
  • アーカイブファイル形式のリストア

スクリプトファイル形式のリストア

スクリプトファイル形式のバックアップは、psqlコマンドで直接リストアできます。

以下のコマンドを使用します。

psql -U username -d test_db -f test_db.sql

このコマンドを実行すると、test_db.sqlファイルの中のSQLコマンドが順に実行され、データベースが元の状態に戻ります。

アーカイブファイル形式のリストア

アーカイブファイル形式のバックアップは、pg_restoreコマンドを使用してリストアします。

以下はその例です。

pg_restore -U username -d test_db -f test_db.dump

pg_restoreコマンドは、アーカイブファイル形式のバックアップからデータベースをリストアします。

また、リストアする際に特定のテーブルだけを選んでリストアすることも可能です。

pg_dumpの高度な使い方:コマンドオプションの活用

pg_dumpのオプションを見ていきましょう。

それらを適切に活用することで、より細かい設定や効率的なバックアップが可能です。

  • バックアップ対象の絞り込み
  • 高度なバックアップ設定

バックアップ対象の絞り込み

pg_dumpでは、バックアップの対象を特定のスキーマやテーブルに絞り込むことが可能です。

-nオプションを使用して、特定のスキーマのみをバックアップできます。

pg_dump -U username -n myschema --file=myschema.sql test_db

このコマンドは、test_dbデータベースのmyschemaというスキーマのみをバックアップします。

高度なバックアップ設定

pg_dumpには、バックアップの設定をより詳細にコントロールするためのオプションが多数あります。

  • -vオプション:冗長モードを有効にし、詳細な情報を出力
  • --sectionオプション:バックアップするセクション(pre-data、data、post-data)を指定

これを用いると、たとえば、スキーマのみをバックアップしたり、データのみをバックアップしたりすることが可能です。

pg_dump -U username --section=pre-data --file=schema.sql test_db

test_dbデータベースのスキーマ情報(テーブルの定義等)のみをバックアップします。

まとめ

当記事では、PostgreSQLの論理バックアップツールであるpg_dumpの使い方を詳しく説明しました。

  • pg_dumpの基本的な概念と仕組み
  • 実際の使用方法
  • pg_dumpのさまざまなオプションを使った高度な使い方

pg_dumpは、データベースの内容を論理的な形でバックアップし、必要に応じて復元するための強力なツールです。

これらの知識を活用することで、データの損失に備えた適切なバックアップ計画を立て、それを実行できます。

データはビジネスの重要な資産であるため、適切なバックアップと復元の戦略は必須といえるでしょう。

タイトルとURLをコピーしました