PostgreSQLを使っていると、開発環境や検証環境で「ダンプファイルを使ってデータを復元したい」「既存のデータをまるっと上書きしたい」と思う場面があると思います。
たとえば、
などなど、いわば「リセットボタンを押したい」瞬間ですね。
でも実際にやろうとすると、「ダンプファイルをどうやって上書きするの?」「このエラー、どう対処すれば…?」と戸惑うこともあるかもしれません。
特に、pg_dump
や pg_restore
、psql
など、似ているようで少しずつ違うツールが登場するので、最初は迷いやすいポイントです。
この記事では、そんな「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:データベースを削除して作り直す
もっともシンプルで確実な「上書き方法」は、データベースをいったん削除して作り直し、そこにダンプファイルを復元するやり方です。
一度更地にしてから建て直すようなイメージですね。
この方法が向いているケース
逆に、本番環境や他のユーザーも使っているデータベースでは 誤って削除しないように注意 しましょう。
手順: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でダンプファイルを使って既存データベースを「上書き」する方法について、基本から手順まで詳しく解説しました。
ポイントをおさらいすると──
特に開発現場では、「何度も初期状態に戻す」「他の環境と整合をとる」といった場面が多くあります。そんなとき、この“上書きリストア”のテクニックが非常に役立ちます。
今回の内容が、みなさんの運用や開発の現場でお役に立てば幸いです。
コメント