EC2にPostgreSQLをインストールしてサンプルDBを作成しよう!

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というサイトのサンプルデータベースを使用してサンプルデータを投入します。

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の利用を検討すると良いかと思います。

最後まで読んでいただきありがとうございました!

この記事をシェアする
著者:アミ
AWSエンジニア。好きなAWSサービスはAMIです!