ブログBLOG

\ Web・ゲーム開発に関する情報を発信中 /

【超簡単】DockerでPostgreSQLのデータをインポート・エクスポートする方法

Docker , PostgreSQL
docker , postgresql
20251116_docker-postgresql-data-import-export-tmb

ご覧いただきありがとうございます!
領護(りょうご)です。

開発環境でPostgreSQLコンテナを利用している際、「本番環境のデータをローカルで検証したい」「バックアップデータを手軽に復元したい」と思ったことないですか?
この記事では、Docker環境におけるPostgreSQLのデータを、ローカル環境へエクスポート(バックアップ)し、そのデータを再度インポート(リストア)する手順を解説します。

目次

実行環境

Docker:28.5.1
PostgreSQL:16

コンテナ構成

20251116_docker-postgresql-data-import-export-01

今回、解説に使用するコンテナ構成です。
DjangoとPostgreSQLを使用してWEBサイトを作成する構成です。

PostgreSQLコンテナ詳細
CONTAINER ID:2d7fa7dec03c
IMAGE:postgres:16
NAMES:sample_db
USER NAME:sample_user
DB NAME:sample_project_db

「USER NAME」「DB NAME」は、PostgreSQLコンテナを作成する際に設定した値になります。

コンテナ構成の調べ方

docker ps

コマンドプロンプトやPowerShellなどのターミナルを開き、上記のコマンドを入力して実行します。
実行すると、現在稼働している全てのコンテナ情報(ID、名前、イメージ、ポートマッピングなど)が一覧で表示されます。
その中のPostgreSQLコンテナの「CONTAINER ID」または「NAMES」を確認して控えておいてください。

DBのデータをエクスポート(コンテナ → ローカル)

まずは、PostgreSQLコンテナ内のDBデータをローカル環境のデスクトップにエクスポート(バックアップ)する手順を解説します。

PostgreSQLコンテナ内でSQLファイルを生成

「pg_dump」コマンドを使って、DBデータ全体をSQLファイルとしてコンテナ内に書き出します。

docker container exec -it [コンテナID/コンテナ名] bash
docker container exec -it sample_db bash

PostgreSQLコンテナに入るコマンドを入力して実行します。
[コンテナID/コンテナ名]:控えた「CONTAINER ID」または「NAMES」に置き換えてください。

pg_dump -U [PostgreSQLのユーザー名] -d [DB名] > [任意のファイル名].sql
pg_dump -U sample_user -d sample_project_db > sample_project_db.sql

pg_dumpコマンドを実行して、データをエクスポートします。
下記の内容に置き換えてコマンドを実行してください。
[PostgreSQLのユーザー名]:PostgreSQL設定時に指定したユーザー名
[DB名]:エクスポートしたいデータベース名
[任意のファイル名]:コンテナ内に生成したいSQLファイル名

ls
20251116_docker-postgresql-data-import-export-02

lsコマンドで、指定したSQLファイルがコンテナのルートディレクトリに生成されているか確認します。
生成されていれば、データのエクスポートは完了です。

コンテナからローカル環境へファイルをコピー

生成したSQLファイルはまだPostgreSQLコンテナ内にあります。
「docker cp」コマンドでローカルのデスクトップにファイルをコピーします。

exit

exitコマンドを実行して、PostgreSQLコンテナから出ます。

docker cp [コンテナID/コンテナ名]:/[エクスポートしたファイル名].sql [保存先のローカルパス]
docker cp sample_db:/sample_project_db.sql C:\Users\ユーザー名\Desktop\sample_project_db.sql

先ほどエクスポートしたSQLファイルをローカル環境にコピーするコマンドを実行します。
下記の内容に置き換えてコマンドを実行してください。
[コンテナID/コンテナ名]:控えた「CONTAINER ID」または「NAMES」を入力
[エクスポートしたファイル名]:先ほどエクスポートしたSQLファイル名を入力
[保存先のローカルパス]:保存したいローカルのパスを入力
※ デスクトップに保存したい場合は、例を参考に入力してください。

Successfully copied 27.1kB to C:\Users\ユーザー名\Desktop\sample_project_db.sql

正常にコピーが完了すると、上記のようなメッセージが表示されます。
これで、ローカル環境にDBのバックアップデータが保存されました。

DBのデータをインポート(ローカル → コンテナ)

次に、ローカル環境にあるSQLファイルをPostgreSQLコンテナに取り込み、DBにインポート(リストア)する手順を解説します。

ローカルからPostgreSQLコンテナへファイルをコピー

ローカルにあるインポートしたいSQLファイルを、「docker cp」コマンドを使ってコンテナ内に転送します。

docker cp [インポートしたいSQLファイルのローカルパス] [コンテナID/コンテナ名]:/[コンテナ内の保存先パス]
docker cp C:\Users\ユーザー名\Desktop\sample_project_db.sql sample_db:/sample_project_db.sql

先ほどローカル環境にコピーしたSQLファイルをPostgreSQLコンテナに転送するコマンドを実行します。
下記の内容に置き換えてコマンドを実行してください。
[コンテナID/コンテナ名]:控えた「CONTAINER ID」または「NAMES」を入力
[インポートしたいSQLファイルのローカルパス]:インポートしたいSQLファイルのローカルパスを入力
[コンテナ内の保存先パス]:保存したいコンテナ内のパスを入力
※ デスクトップからインポートしたい場合は、例を参考に入力してください。

Successfully copied 27.1kB to sample_db:/sample_project_db.sql.

正常に転送が完了すると、上記のようなメッセージが表示されます。
これで、ローカル環境からPostgreSQLコンテナにデータが転送されました。

コンテナ内でDBにデータをインポート

コンテナ内に転送したSQLファイルを使って、「psql」コマンドでデータをデータベースに流し込みます。

注意!

データをインポートする前に、インポート先のデータベース内の既存のデータを全て削除してから実行することをおすすめします。
既存データとインポートデータが混ざったり、プライマリキーの重複エラーが発生したりするのを防げます。

docker container exec -it [コンテナID/コンテナ名] bash
docker container exec -it sample_db bash

PostgreSQLコンテナに入るコマンドを入力して実行します。
[コンテナID/コンテナ名]:控えた「CONTAINER ID」または「NAMES」に置き換えてください。

ls
20251116_docker-postgresql-data-import-export-02

lsコマンドで、コピーしたSQLファイルがコンテナ内に存在するか確認します。

psql -U [PostgreSQLのユーザー名] -d [DB名] < [任意のファイル名].sql
psql -U sample_user -d sample_project_db < sample_project_db.sql

psqlコマンドを実行して、データをインポートします。
下記の内容に置き換えてコマンドを実行してください。
[PostgreSQLのユーザー名]:PostgreSQL設定時に指定したユーザー名
[DB名]:インポートしたいデータベース名
[任意のファイル名]:コンテナ内に転送したSQLファイル名

これで、DBデータのインポートが完了しました。
お疲れさまでした!

最後に

今回は、Dockerコンテナ内のPostgreSQLデータを手軽にエクスポート(バックアップ)し、インポート(リストア)する手順を解説しました。
バックアップの取得や、初期データ・テストデータの流し込み、本番環境のデータを使ったローカルでの再現テストなど、様々なシーンで役立ちます。
ぜひ参考にしてみてください!

参考にさせて頂いたサイト様

https://qiita.com/gologo13/items/7e4e404af80377b48fd5


\ よかったらシェアしてね /

関連記事