PostgreSQLをEC2に導入する
AWSのEC2サーバー内でWeb3層構成を構築している際、データベース層には「PostgreSQL」を導入することにした。
導入するのに苦労したので、導入やユーザー、データベース作成の過程を書いていきたい。
PostgreSQLのダウンロードリスト
以下をインストールしました。
$ sudo yum list postgresql.x86_64 postgresql-contrib.x86_64 postgresql-devel.x86_64 postgresql-libs.x86_64 postgresql-server.x86_64
存在を確認します。
$ psql --version
PstgreSQLの設定や操作
データベースの初期化
$ sudo service postgresql initdb
データベース起動
$ sudo service postgresql start
起動確認します。
$ service postgresql status
systemctlコマンドでも実行できるけど、違いがわかんねぇ...
「service postgresql status」だと「Redirecting to /bin/systemctl status postgresql.service」と出るからどっちも同じ意味だよね?笑
サーバー(EC2インスタンス)起動時に、PostgreSQLも自動起動させる
$ sudo chkconfig postgresql on
以下のコマンドでもできた↓
sudo systemctl enable postgresql
結果が以下の通り(enable)なら無事自動起動の設定完了
$ systemctl list-unit-files -t service | grep postgres postgresql.service enabled
エンコードの変更
まずデフォルトのデータベースを確認します。
PostgreSQL にスーパーユーザー(postgres)で接続
$ sudo -u postgres psql
postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges --------------+----------+-----------+-------------+-------------+----------------------- postgres | postgres | SQL_ASCII | C | C | template0 | postgres | SQL_ASCII | C | C | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | SQL_ASCII | C | C |
このままデータベースを作成するとエンコードが「SQL_ASCII」になってしまうため、アプリ側で「UTF-8」に設定していると、アプリとデータベースでうまく接続されません。
先にエンコードが「UTF-8」になるように設定します。
参考↓
PostgreSQL: template1 のエンコーディングを UTF-8 に変更する - tkrdの日記
postgres=# UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1'; # DROP DATABASE template1; # CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'ja_JP.UTF-8' LC_CTYPE = 'ja_JP.UTF-8'; # UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';
これでやっと諸々の作成作業に入れます。
ユーザーやデータベースの作成
ユーザー(パスワード付き)を作成して、そのユーザーが所有するデーターベースを作成します。
今回はアプリの本番環境で使うデータベースを作成します。
ユーザーを作成(パスワード付き)
postgres=# alter role postgres with password ‘password’; # alter role ユーザー名 with password ‘password‘;
権限を与えます。↓
postgres=# ALTER ROLE user-name WITH CREATEDB; ALTER ROLE
postgres=# \du List of roles Role name | Attributes | Member of --------------------+------------------------------------------------------------+----------- user-name | Create DB | {}
これはいるのかわからないけど。。。↓
/var/lib/pgsql93/data/pg_hba.conf # TYPE DATABASE USER ADDRESS METHOD #local all all peer ← コメントアウトか、削除 local all all md5 ← 追加
いろいろ調べた結果、今回の作業だと蛇足だったかもです。
データベース作成↓
postgres=# create database [database_name] owner [user_name];
とりあえずこれで、アプリに繋ぐ PostgreSQL側の下準備はできたと思う。