Amazon linux に PostgreSQL 9.3の環境を構築してみる

諸事情あって、EC2 on PostgreSQL 9.3 を知る必要があるので、ひとまず環境を作成してみる

やったこと

  • EC2環境構築
  • PostgreSQL 9.3 のインストール
  • PostgreSQL 9.3 の起動
  • ユーザとDB、tableを作成して、select を実行

EC2環境構築

適当に web UI から Amazon linux の t2.small を作成

  • ストレージはデフォルト8GBだと足りなそうなので16GBに

PostgreSQL 9.3 のインストール

手順

それぞれ、EC2環境にsshして実行している

  • yumリポジトリの設定ファイルの rpm をinstall
  • yum install

yumリポジトリの設定ファイルの rpm をinstall

PostgreSQL は yumリポジトリの設定ファイルをrpmで配布しているので、それを取得する

$ wget https://download.postgresql.org/pub/repos/yum/9.3/redhat/rhel-6-x86_64/pgdg-ami201503-93-9.3-3.noarch.rpm

rpmのインストール

$ sudo rpm -ivh pgdg-ami201503-93-9.3-3.noarch.rpm 

yumリポジトリが追加されたことを確認

$ rpm -ql pgdg-ami201503-93-9.3-3.noarch

/etc/pki/rpm-gpg
/etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG-93
/etc/yum.repos.d/pgdg-93-ami201503.repo

yum install

追加された postgresql93 関係のパッケージを確認

$ sudo yum list all  postgresql93*

読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
14 packages excluded due to repository priority protections
利用可能なパッケージ
postgresql93.x86_64                                                               9.3.25-1PGDG.rhel6                                                    pgdg93
postgresql93-contrib.x86_64                                                       9.3.25-1PGDG.rhel6                                                    pgdg93
postgresql93-debuginfo.x86_64                                                     9.3.25-1PGDG.rhel6                                                    pgdg93
postgresql93-devel.x86_64                                                         9.3.25-1PGDG.rhel6                                                    pgdg93
postgresql93-docs.x86_64                                                          9.3.25-1PGDG.rhel6                                                    pgdg93
postgresql93-libs.x86_64                                                          9.3.25-1PGDG.rhel6                                                    pgdg93
postgresql93-odbc.x86_64                                                          10.03.0000-1PGDG.rhel6                                                pgdg93
postgresql93-odbc-debuginfo.x86_64                                                09.03.0400-1PGDG.rhel6                                                pgdg93
postgresql93-plperl.x86_64                                                        9.3.25-1PGDG.rhel6                                                    pgdg93
postgresql93-plpython.x86_64                                                      9.3.25-1PGDG.rhel6                                                    pgdg93
postgresql93-pltcl.x86_64                                                         9.3.25-1PGDG.rhel6                                                    pgdg93
postgresql93-server.x86_64                                                        9.3.25-1PGDG.rhel6                                                    pgdg93
postgresql93-tcl.x86_64                                                           2.4.0-1.rhel6                                                         pgdg93
postgresql93-tcl-debuginfo.x86_64                                                 2.3.1-1.rhel6                                                         pgdg93
postgresql93-test.x86_64                                                          9.3.25-1PGDG.rhel6                                                    pgdg93

yum install postgresql-server すれば、必要なものはすべてインストールされるらしいので、それに従う

$ sudo yum -y install postgresql93-server.x86_64

結果、以下のパッケージがインストールされた

インストール中:
 postgresql93-server                         x86_64                         9.3.25-1PGDG.rhel6                           pgdg93                         4.1 M
依存性関連でのインストールをします:
 postgresql93                                x86_64                         9.3.25-1PGDG.rhel6                           pgdg93                         1.0 M
 postgresql93-libs                           x86_64                         9.3.25-1PGDG.rhel6                           pgdg93                         198 k

PostgreSQL 9.3の起動

PostgreSQLをインストールすると、postgresql userが追加されるので、それを確認

$ id postgres
uid=26(postgres) gid=26(postgres) groups=26(postgres)

serviceをONにする

$ sudo chkconfig postgresql-9.3 on
$ chkconfig --list postgresql-9.3

注記: この出力に含まれるのは SysV サービスのみです。ネイティブな 
      systemd サービスは含まれません。SysV の設定データはネイティブな
        systemd 設定で上書きされる場合があります。
      systemd サービスを一覧表示する場合は 'systemctl list-unit-files' を使用します。
      特定のターゲットで有効になっているサービスを確認する場合は
      'systemctl list-dependencies [target]'を使用します。

postgresql-9.3  0:off   1:off   2:on    3:on    4:on    5:on    6:off

initdb

$ sudo service postgresql-9.3 initdb -E UTF-8 --no-locale
  • -E はエンコードの指定。明示的に指定しないと、起動環境のエンコードを引き継ぐので、UTF-8を明示的に指定
  • --no-locale はロケールの指定。こちらも明示的にロケールを引き継がないようにしている(ソート順などに影響がでるらしい

起動

$ sudo service postgresql-9.3 start

本当はこの後にアクセス制限を設定する必要があるが割愛

ユーザとDB、tableを作成して、select を実行

ユーザの作成

$ sudo su - postgres
$ createuser ec2-user

DB作成権限を付与

$ psql
postgres=# ALTER ROLE "ec2-user" WITH CREATEDB;
ALTER ROLE

権限が付与されたことを確認

postgres=# \du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 ec2-user  | Create DB                                      | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}

DBの作成

ec2-user で実行

$ createdb mydb -U ec2-user

作られたことを確認

$ psql -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権       
-----------+----------+------------------+-------------+-------------------+-----------------------
 mydb      | ec2-user | UTF8             | en_US.UTF-8 | en_US.UTF-8       | 
 postgres  | postgres | UTF8             | en_US.UTF-8 | en_US.UTF-8       | 
 template0 | postgres | UTF8             | en_US.UTF-8 | en_US.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | en_US.UTF-8 | en_US.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
(4 行)

テーブルの作成

DBに接続

$ psql mydb

ここのチュートリアルを参考に、テーブルを作成してみる

CREATE TABLE weather (
    city            varchar(80),
    temp_lo         int,           -- 最低気温
    temp_hi         int,           -- 最高気温
    prcp            real,          -- 降水量
    date            date
);

作られたことを確認

mydb=> \d
            リレーションの一覧
 スキーマ |  名前   |    型    |  所有者  
----------+---------+----------+----------
 public   | weather | テーブル | ec2-user
(1 行)

行を挿入

INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');

挿入されたことを確認

mydb=> select * from weather;
     city      | temp_lo | temp_hi | prcp |    date    
---------------+---------+---------+------+------------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27
(1 行)

今日はここまで

その後やりたいこと

  • サンプルデータの挿入
  • レプリケーション
  • バックアップとリカバリ
  • DBのバージョンアップ(to 9.6)