EC2を使ったPostgreSQLダンプファイルのリストア手順
- 最終更新日: 2025年9月12日(金)
- 公開日: 2025年9月10日(水)
こんにちは。デザイン・システム室の永野です。
今回は、EC2を使ったPostgreSQLダンプファイルのリストア手順についてまとめてみました。
今後、EC2を用いてPostgreSQLダンプファイルをリストアし、そのデータをRDS上に保存できるようにしたいという方のためになれば幸いです。
イメージ図と行ったこと
PostgreSQLダンプファイルをEC2上でリストアし、RDSにデータを保存するイメージは下記の通りです。

また、リストアの実行手順は下記の通りです。
① EC2インスタンス、SGの作成
② EC2インスタンスにSSH接続するためのSSHキーの作成
③ RDS DBインスタンス、SGの作成
④ scpコマンドで、ローカルPCからEC2インスタンスへコピー
⑤ EC2インスタンスにpsqlクライアントをインストール
⑥ EC2インスタンス内で、リストアコマンドを実行
⑦ データベースに接続し、リストアされたかどうかの確認
①〜③は、AWSコンソール上で設定してください。個人的なポイントとしては、EC2がRDSにアクセスできるようにするために、RDSのセキュリティグループのインバウンド許可設定にEC2のセキュリティグループを追加することです。ただ、今回は説明を省略させていただきます。
今回は、④ 以降の実行手順について説明いたします。
④ は、EC2インスタンスの外で実行します。実行コマンドは下記の通りです。
$ scp -i /path/to/your-key.pem /local/path/to/file.txt ec2-user@ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com:/home/ec2-user/
コマンドの説明は下記の通りです。
i /path/to/your-key.pem
→ EC2インスタンスにアクセスするためのキーペア(秘密鍵)のパス/local/path/to/file.txt
→ ローカルPCの転送したいファイルのパスec2-user@ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com
→ EC2インスタンスのユーザー名とパブリックDNS(Amazon Linuxの場合、ユーザーはec2-user
):/home/ec2-user/
→ EC2インスタンス側の保存先ディレクトリ
上記コマンドを実行することで、EC2インスタンス内に、dumpファイルが転送されます。
次に、⑤ 以降のコマンドは、EC2インスタンス内で実行する必要があります。
なので、下記のコマンドを実行し、ローカルPCからEC2へSSH接続し、EC2インスタンス内に入ります。
実行コマンドは下記の通りです。
$ ssh -i "dump-restore-key.pem" ec2-user@ec2-xx-xxx-xxx-xx.ap-northeast-1.compute.amazonaws.com
, #_
~\\_ ####_ Amazon Linux 2023
~~ \\_#####\\
~~ \\###|
~~ \\#/ ___ <https://aws.amazon.com/linux/amazon-linux-2023>
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
[ec2-user@ip-xx-x-x-xxx ~]$
上記画面が出力されたら、EC2インスタンス内に入ることができたということになります。
次に、⑤ ですが、今回のケースでは、アプリケーションが接続していたデータベースとして PostgreSQL を使用していました。
また、EC2インスタンスは、起動直後から psql がインストールされているわけではありません。
この処理を行うには、PostgreSQL データベースを操作するためのツールである psql クライアント が必要となります。なので、この後は、psqlクライアントをインストールしたいと思います。
コマンドでEC2インスタンス内に、psqlクライアントがインストールされているか確認するためのコマンドは、下記の通りです。
[ec2-user@ip-xx-x-x-xxx ~]$ which psql
/usr/bin/which: no psql in (/home/ec2-user/.local/bin:/home/ec2-user/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin)
上記より、psqlがインストールされていないことが確認できたので、この後は psql をインストールします。psql のインストールコマンドは下記の通りです。
[ec2-user@ip-xx-x-x-xxx ~]$ sudo dnf install postgresql15
インストールを終えた後、which psql コマンドで、パス表示されていれば、インストールされていると思います。
私の場合、which psql コマンドで確認したところ、/usr/bin/psql と表示されました。
[ec2-user@ip-xx-x-x-xxx ~]$ which psql
/usr/bin/psql
また、この後 ⑥ で、リストアコマンドを実行しますが、念の為、この時点でEC2インスタンスからRDSへ接続できることを確認してください。
実行コマンドは下記の通りです。
[ec2-user@ip-xx-xx-xx-xxx ~]$ psql --host=database-1.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com --port=5432 --dbname=postgres --username=postgres
Password for user postgres:
psql (15.13, server 17.4)
WARNING: psql major version 15, server major version 17.
Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
次に、上記状態から exit コマンドで抜け、再びEC2インスタンス内に戻ります。
そして、⑥ ですが、下記のコマンドがリストアコマンドになります。
実行コマンドは下記の通りです。
[ec2-user@ip-xx-xx-xx-xxx ~]$ psql --host=database-1.xxxxxxxx.ap-northeast-1.rds.amazonaws.com \\
--port=5432 \\
--username=postgres \\
--dbname=postgres \\
-f ~/xxxxxx.dump
上記を実行することで、リストアを実行することができます。
最後の ⑦ として、EC2からRDSへ接続し、テーブルやデータが作成されているか確認してみます。
[ec2-user@ip-xx-x-x-xxx ~]$ psql --host=database-1.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com --username=postgres --dbname=postgres
psql (15.13, server 17.4)
WARNING: psql major version 15, server major version 17.
Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
postgres=> \\dt
List of relations
Schema | Name | Type | Owner
--------+------------------------------------------+-------+----------
public | active_storage_attachments | table | postgres
public | active_storage_blobs | table | postgres
public | analyst_reports | table | postgres
public | api_keys | table | postgres
public | ar_internal_metadata | table | postgres
public | attendance_details | table | postgres
・
・
・
postgres=> SELECT * FROM active_storage_attachments LIMIT 5;
id | name | record_type | record_id | blob_id | created_at
----+------------+--------------------------+-----------+---------+----------------------------
xx | image | Xxxxxxxxxxxxxxxxxxxxxxx | xx | xx | 2024-12-05 xx:xx:xx.xxxxxx
xx | main_image | Xxxxxxxxxxxxxxxxxxxxxxx | xx | xx | 2025-06-03 xx:xx:xx.xxxxxx
(2 rows)
上記より、無事、EC2内で dumpファイルをリストアし、RDSに保存することができました。
まとめ
今回、EC2を使ったPostgreSQLダンプファイルのリストア手順を紹介いたしました。
私が思っていたよりも簡単に実行することができました。
今回の経験をもとに、他のデータベースでも、今回のような手順で、dumpファイルをリストアすることができるかどうか、試してみたいと思います。
現在デザイン・システム室では、新しいメンバーを募集しています。
少しでも興味を持たれた方は、ぜひご応募ください。
皆様からのご応募、心よりお待ちしております。