EC2(Amazon Linux AMI)へのPostgreSQLのインストールと設定

PostgreSQLの設定にだいぶ手間取ったので、 次からすぐに設定できるようにメモ。

インストール

yumにはPostgresSQLが準備されてないので、rpmからとってくる。 今回インストールしたのはPostgresSQL-9.6.

wget https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64/pgdg-ami201503-96-9.6-2.noarch.rpm
sudo rpm -ivh pgdg-ami201503-96-9.6-2.noarch.rpm
sudo yum install -y postgresql96 postgresql96-server postgresql96-libs postgresql96-contrib
sudo /etc/init.d/postgresql-9.6 initdb
sudo /etc/init.d/postgresql-9.6 start

公式にDL用のコマンドジェネレータがあるので、違うバージョンをダウンロードしたいときはこちらから。 PostgreSQL: Linux downloads (Red Hat family)

常に起動したいときは以下もたたいておく。

chkconfig postgresql-9.6 on

ここまでで、以下のコマンドでpsql(PostgreSQL)に接続できるようになる。

sudo -u postgres -i psql

パスワード設定とアプリケーション用ユーザの設定

PostgresSQLは最初「Unixユーザ名」と「PostgresSQLのユーザ」が一致しないとログインできない Peer認証というのになっている。

Postgresユーザでアプリが起動するとは限らないし、sudoとかしたくない。 新しいユーザを作り、sudoしないでshellからpsqlにログイン&アプリケーションからつなげるようにしていく。

最初はpostgresユーザしかいないのでpostgresユーザで入る

sudo -u postgres -i psql

パスワードの設定とアプリケーション用ユーザの作成

-- パスワードの設定
\password
-- ここでパスワードをきかれるので設定する

-- ユーザを作る
CREATE ROLE ユーザ名 LOGIN CREATEDB PASSWORD 'ここにパスワード';

-- ↑のユーザが管理したいdbを作る
CREATE DATABASE データベース名 OWNER ユーザ名;

ユーザを作ったら、psqlの設定を-Uで選択するユーザをUnixユーザ名と関係なく指定できるよう 以下の設定を変更する。

amazon linuxの場合は以下のパスに設定ファイルがあるが、 OSが違う場合は違うところにあるので注意。

sudo emacs /var/lib/pgsql/9.6/data/pg_hba.conf

以下のように変更

# local   all             all                                    peer
local   all             all                                    md5

# localhostからのアクセスをパスワード認証にしたい場合はこちらも変更
# host    all             all             127.0.0.1/32            ident
host    all             all             127.0.0.1/32            md5

これでパスワード認証ができるように。 詳しい設定方法は以下を見ればわかる。 https://www.postgresql.org/docs/9.6/static/auth-pg-hba-conf.html

設定が完了したらpsqlをリスタートする。

sudo /etc/init.d/postgresql-9.6 restart
# reloadでも大丈夫そう
# sudo /etc/init.d/postgresql-9.6 reload

# 以下でログイン可能に
psql -U ユーザ名 -d データベース名 -h localhost;

PostgresSQL の connection URI

以上の設定で postgresql://ユーザ名:パスワード@localhost:5432/データベース名 でアクセスできる。

おまけ