PostgreSQLのダンプファイルを既存データベースに上書きリストアする手順まとめ

スポンサーリンク

PostgreSQLを使っていると、開発環境や検証環境で「ダンプファイルを使ってデータを復元したい」「既存のデータをまるっと上書きしたい」と思う場面があると思います。

たとえば、

  • チームで共通の初期データを何度も読み込み直したいとき
  • バックアップから元の状態に戻したいとき
  • ちょっと壊してしまったテーブルを一発で元に戻したいとき

などなど、いわば「リセットボタンを押したい」瞬間ですね。

でも実際にやろうとすると、「ダンプファイルをどうやって上書きするの?」「このエラー、どう対処すれば…?」と戸惑うこともあるかもしれません。
特に、pg_dumppg_restorepsql など、似ているようで少しずつ違うツールが登場するので、最初は迷いやすいポイントです。

この記事では、そんな「PostgreSQLでダンプファイルを上書きする方法」について、具体的な手順や注意点を丁寧に解説していきます。
開発現場で実際に役立つような実践的な内容を意識していますので、どうぞ気楽に読み進めてください。

PostgreSQLのダンプとリストアの基本

まずは、「上書き」を行うための前提知識として、PostgreSQLにおけるダンプとリストアの基本を押さえておきましょう。

ダンプとは?

PostgreSQLでいう「ダンプ」とは、データベースの中身(テーブルの定義、データ、インデックスなど)をファイルとして出力することです。
いわゆる「バックアップ」ですね。

よく使われるのが pg_dump コマンドです。

pg_dump -U ユーザー名 -d データベース名 -f backup.sql

このコマンドを実行すると、指定したデータベースの内容が backup.sql にSQL文の形で保存されます。

リストア(復元)とは?

そして、保存したダンプファイルを使ってデータベースにデータを戻す操作が「リストア」です。

リストアの方法は、ダンプファイルの形式によって少し変わります。

psql -U ユーザー名 -d データベース名 -f backup.sql

これはSQL文をそのまま一つずつ実行していくイメージですね。シンプルで扱いやすいのが特長です。

「上書き」復元をしたい場合も、まずはこの「ダンプを作る → 復元する」という基本の流れを知っておくことがとても大切です。

ダンプファイルを「上書き」するには?

さて、ここから本題です。
「ダンプファイルを上書きする」とは、具体的にどんなことを指しているのでしょうか?

ざっくり言えば――

今あるデータベースの中身を、ダンプファイルの内容で“まるごと置き換える”こと

だと思います。

実は、PostgreSQLには“上書き”というコマンドはない

少しややこしいのですが、PostgreSQLには「このコマンドでデータベースを上書きします」といった、明確な上書き専用の機能はありません。

そのため、実際には下記で紹介するような手段を使って、「擬似的に上書きする」という形になります。

方法1:データベースを削除して作り直す

もっともシンプルで確実な「上書き方法」は、データベースをいったん削除して作り直し、そこにダンプファイルを復元するやり方です。
一度更地にしてから建て直すようなイメージですね。

この方法が向いているケース

  • テスト・開発用のDBを何度も初期化したい
  • 他のアプリやユーザーと共有していないデータベース
  • 本番ではなく、リスクの少ない環境

逆に、本番環境や他のユーザーも使っているデータベースでは 誤って削除しないように注意 しましょう。

手順:DROP → CREATE → リストア

ステップ1:データベースを削除する

まずは既存のデータベースを削除します。

dropdb -U ユーザー名 データベース名

あるいは、psql に接続して以下のSQL文を実行してもOKです。

DROP DATABASE データベース名;

ステップ2:データベースを再作成する

続いて、同じ名前でデータベースを再作成します。

createdb -U ユーザー名 データベース名

この時点で、空のデータベースが完成しています。psql に接続している場合は、こう書きます。

CREATE DATABASE データベース名

ステップ3:ダンプファイルをリストアする

あとはダンプファイルの内容を流し込むだけです。

SQL形式なら、

psql -U ユーザー名 -d データベース名 -f backup.sql

カスタム形式なら、

pg_restore -U ユーザー名 -d データベース名 backup.dump

完了すれば、ダンプ作成時の状態がそのまま復元されます!

方法2:テーブル単位で上書きする

データベースごと削除するのはちょっと大げさだったり、権限の問題でできないケースもありますよね。
そんなときは、既存のテーブルやスキーマだけを削除して、そこにダンプファイルをリストアするという方法が使えます。

こちらはより「部分的な上書き」に近いイメージです。

この方法が向いているケース

  • データベースの削除ができない(権限がない、本番環境など)
  • 一部のテーブルやスキーマだけを初期化したい
  • スクリプトなどで自動化して、繰り返し使いたい

手順:テーブル削除 → リストア

ステップ1:既存のテーブルやデータを削除する

まずは、上書き対象となるテーブルやスキーマを削除します。psql などで次のようなSQLを実行します。

DROP SCHEMA public CASCADE;
CREATE SCHEMA public;

この操作で、public スキーマ内の全テーブル・関数・インデックスなどを一括で削除できます。スキーマごと初期化できる便利な方法です。

※「CASCADE」を付けることで、依存するオブジェクトもすべて削除されます。

ステップ2:リストアする

テーブルがなくなった状態なので、あとはダンプファイルを流し込めばOKです。

SQL形式なら、

psql -U ユーザー名 -d データベース名 -f backup.sql

カスタム形式なら、

pg_restore -U ユーザー名 -d データベース名 backup.dump

これで、スキーマ内は完全にダンプファイルの内容と入れ替わります。

まとめ

今回は、PostgreSQLでダンプファイルを使って既存データベースを「上書き」する方法について、基本から手順まで詳しく解説しました。

ポイントをおさらいすると──

  • ダンプとリストアの基本を押さえることで、復元操作への理解が深まる
  • 上書きには大きく分けて2つの方法がある
    • データベースを削除して作り直す(もっともクリーンで確実)
    • テーブルやスキーマ単位で削除してリストアする(権限制限下でも使いやすい)
  • それぞれの方法に向いているシーンがあり、使い分けが大切

特に開発現場では、「何度も初期状態に戻す」「他の環境と整合をとる」といった場面が多くあります。そんなとき、この“上書きリストア”のテクニックが非常に役立ちます。

今回の内容が、みなさんの運用や開発の現場でお役に立てば幸いです。

PostgreSQL
スポンサーリンク
なんくるをフォローする

コメント

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