EC2にPostgreSQLをインストールしてサンプルDBを作成しよう!
目次
はじめに
こんにちは!スカイアーチHRソリューションズのアミです。
今回は、EC2にPostgreSQLをインストールして、サンプルデータを投入するまでの手順をまとめました。
学習や検証などの用途で「なんかイイ感じにデータの入ったDBサーバが欲しい!」なんて時にこの記事が参考になれば幸いです。
作成手順
手順は以下の通りです。
- PostgreSQLのインストール
- PostgreSQLのセットアップ
- サンプルデータ投入
前提条件
今回は以下の条件で作成していきます。
- EC2
- Amazon Linux 2023
- t2.micro
- PostgreSQL
- PostgreSQL15
PostgreSQLのインストール
早速PostgreSQLをインストールしていきます!前提条件に記載の通りPostgreSQL15を使用します。
Amazon Linux 2023ではPostgreSQL15のパッケージが既に用意されているので、このままインストールをしていきます。
OSによって用意されているパッケージやバージョンが違うので、インストールしたいパッケージが用意されていない場合はリポジトリ(パッケージセットのようなもの)を追加して、リポジトリからインストールする必要があります。このあたりも今後記事にしていきたいと思います!
sh-5.2$ sudo dnf install -y postgresql15-server
Complete!と表示されたらインストールは完了です!
PostgreSQLのセットアップ
実際にPostgreSQLを利用するために以下の設定を行っていきます。
- 初期化
- postgresアカウントのパスワード設定
初期化
インストール後は、最初に一度初期化が必要なのでやっておきましょう。
sh-5.2$ sudo postgresql-setup initdb
postgresアカウントのパスワード設定
PostgreSQLをインストールするとLinuxユーザーにDB管理用ユーザー[postgres]
が追加されますが、パスワードが設定されていないので手動で設定します。
sh-5.2$ sudo passwd postgres
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
これで最低限のセットアップは完了です!
起動して、データベースが作成されているか確認してみましょう。
起動
sh-5.2$ sudo systemctl start postgresql
DB管理要用ユーザー[postgres]
に切り替え
sh-5.2$ su - postgres
Password:
[postgres@ip-XX-XX-XX-XX ~]$
データベース一覧の確認
[postgres@ip-XX-XX-XX-XX ~]$ psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges
-----------+----------+----------+---------+---------+------------+-----------------+-----------------------
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc |
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
(3 rows)
デフォルトのデータベースが作成されていることを確認できたら、最後にサンプルデータを投入していきます!
サンプルデータの投入
PostgreSQL Tutorialというサイトのサンプルデータベースを使用してサンプルデータを投入します。
DVDレンタルショップを想定したデータベースとなっていて、テーブルやカラムだけでなく中身のデータもしっかり用意されています!
まずは、postgres
ユーザーのまま、curlコマンドを使用して PostgreSQL Tutorialからzipファイルをダウンロードし、解凍しておきます。
[postgres@ip-XX-XX-XX-XX ~]$ curl -k -O https://www.postgresqltutorial.com/wp-content/uploads/2019/05/dvdrental.zip
[postgres@ip-XX-XX-XX-XX ~]$ unzip dvdrental.zip
次に、psqlコマンドを使用してサンプルデータ用のデータベースを作成します。
psqlコマンドでSQL Shellに入ることができ、\qで抜けられます。
もう一度 データベース一覧を表示するとdvdrentalというデータベースが作成できていることを確認できます。
[postgres@ip-XX-XX-XX-XX ~]$ psql
psql (15.0)
Type "help" for help.
postgres=# CREATE DATABASE dvdrental;
CREATE DATABASE
postgres-# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges
-----------+----------+----------+---------+---------+------------+-----------------+-----------------------
dvdrental | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc |
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc |
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
(4 rows)
postgres-# \q
[postgres@ip-XX-XX-XX-XX ~]$
最後に、先ほど解凍したファイルを実行したらデータの投入は完了です!
[postgres@ip-XX-XX-XX-XX ~]$ pg_restore -U postgres -d dvdrental ./dvdrental.tar
中身を確認してみましょう。
psqlコマンドにデータベース名をつけると、指定したデータベースに入ることができます。
\dtコマンドでテーブル一覧を表示してみると、15個のテーブルが作成されていました!
[postgres@ip-XX-XX-XX-XX ~]$ psql dvdrental
psql (15.0)
Type "help" for help.
dvdrental-# \dt
List of relations
Schema | Name | Type | Owner
--------+---------------+-------+----------
public | actor | table | postgres
public | address | table | postgres
public | category | table | postgres
public | city | table | postgres
public | country | table | postgres
public | customer | table | postgres
public | film | table | postgres
public | film_actor | table | postgres
public | film_category | table | postgres
public | inventory | table | postgres
public | language | table | postgres
public | payment | table | postgres
public | rental | table | postgres
public | staff | table | postgres
public | store | table | postgres
(15 rows)
適当にSQLを叩いてみると、中身のデータもしっかり入っていることが確認できます!!
dvdrental=# select * from actor limit 20;
actor_id | first_name | last_name | last_update
----------+------------+--------------+------------------------
1 | Penelope | Guiness | 2013-05-26 14:47:57.62
2 | Nick | Wahlberg | 2013-05-26 14:47:57.62
3 | Ed | Chase | 2013-05-26 14:47:57.62
4 | Jennifer | Davis | 2013-05-26 14:47:57.62
5 | Johnny | Lollobrigida | 2013-05-26 14:47:57.62
6 | Bette | Nicholson | 2013-05-26 14:47:57.62
7 | Grace | Mostel | 2013-05-26 14:47:57.62
8 | Matthew | Johansson | 2013-05-26 14:47:57.62
9 | Joe | Swank | 2013-05-26 14:47:57.62
10 | Christian | Gable | 2013-05-26 14:47:57.62
11 | Zero | Cage | 2013-05-26 14:47:57.62
12 | Karl | Berry | 2013-05-26 14:47:57.62
13 | Uma | Wood | 2013-05-26 14:47:57.62
14 | Vivien | Bergen | 2013-05-26 14:47:57.62
15 | Cuba | Olivier | 2013-05-26 14:47:57.62
16 | Fred | Costner | 2013-05-26 14:47:57.62
17 | Helen | Voight | 2013-05-26 14:47:57.62
18 | Dan | Torn | 2013-05-26 14:47:57.62
19 | Bob | Fawcett | 2013-05-26 14:47:57.62
20 | Lucille | Tracy | 2013-05-26 14:47:57.62
(20 rows)
おわりに
お疲れ様でした。これで「なんかイイ感じにデータの入ったDBサーバ」の構築ができました!
AWSでDBを利用する際はRDSを使用することが多いですが、学習や検証の用途でコストを抑えたい場合や、RDSでサポートされていない機能を使用したい場合にはEC2の利用を検討すると良いかと思います。
最後まで読んでいただきありがとうございました!