Rails4でBootstrap3を使う(ついでにherokuへpush)で書いたエントリーからPostgreSQLインストール手順を抜き出しただけのエントリーです。

PostgreSQLの準備

PostgreSQLインストール

PostgreSQLの公式yumレポジトリからインストールします。

1
2
yum install -y http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-redhat93-9.3-1.noarch.rpm
yum install -y postgresql93-server postgresql93-contrib postgresql93-devel

PostgreSQLインストール直後のデータベースディレクトリである/var/lib/pgsql/9.3/dataを削除してデータベースを初期化(initdb)し、postgresql-9.3サービスを起動します。ついでに、自動起動も設定します。

1
2
3
4
rm -rf /var/lib/pgsql/9.3/data
service postgresql-9.3 initdb
service postgresql-9.3 start
chkconfig postgresql-9.3 on

PostgreSQLの認証方式をPeerからTrustへ変更

https://www.postgresql.jp/document/9.3/html/auth-methods.html

PostgreSQLではデフォルトの認証方式としてPeer認証が設定されています。Peer認証とは、カーネルからクライアント上のシステムユーザ名を取得し、PostgreSQLデータベースユーザと同一である場合のみ接続が許可される仕組みです。PostgreSQLでは、デフォルトではpostgresデータベースユーザしか存在しないため、UnixユーザもPostgreSQLをパッケージインストールすると作成されているpostgresである必要があります(su - postgresしないとダメということ)。

Peer認証だとUnixのスーパーユーザであるrootであってもpostgresデータベースユーザへの接続は許可されません。

1
2
3
4
5
# id
uid=0(root) gid=0(root) 所属グループ=0(root)

# psql --username=postgres
psql: FATAL:  ユーザ "postgres" で対向(peer)認証に失敗しました

今回は、サーバに接続できる全Unixユーザから全データベースユーザへの接続が許可されるTrust認証に変更します

Peer認証からTrust認証への変更は/var/lib/pgsql/9.3/data/pg_hba.confを修正します。

/var/lib/pgsql/9.3/data/pg_hba.conf
1
2
#local   all             all                                     peer
local   all             all                                     trust

設定ファイルを修正したのでpostgresql-9.3サービスを再起動します。

1
service postgresql-9.3 restart

Railsアプリケーション用のデータベースユーザを作成

PostgreSQL 9.3ではCREATE USERはCREATE ROLEの別名になりました。 唯一の違いは、CREATE USERという名前でコマンドが呼び出されると、デフォルトでLOGINになり、CREATE ROLEという名前でコマンドが呼び出されると、デフォルトでNOLOGINとなる点です。

https://www.postgresql.jp/document/9.3/html/sql-createuser.html


PostgreSQLのスーパーユーザであるpostgresデータベースユーザで接続します。

1
psql --username=postgres

今回作成するRailsアプリケーションのプロジェクト名と同一のbootstrap3_sampleというデータベースユーザを作成し、データベース作成権限とログイン権限を持つように設定します。

1
create user bootstrap3_sample with createdb password 'bootstrap3_sample';

上記SQLは以下コマンドと同じ効果があります

1
createuser --username=postgres --createdb bootstrap3_sample -P

createuserコマンドはpostgresql93(末尾の数字はバージョン番号なので適宜目置換を!)RPMパッケージに付属しているPostgreSQLのデータベースユーザ(正確にはロール)を作成するためのコマンドです。SQLでのユーザ作成とは異なり、コマンドでパスワード文字列を指定することは出来ず、-Pオプションによってパスワード文字列を指定するプロンプトが表示されます。

データベースユーザのパスワードがシステムカタログ上に保存される際に暗号化するかどうかはENCRYPTED/UNENCRYPTEDで明示するか、そうでない場合は、/var/lib/pgsql/9.3/data/postgresql.confpassword_encryption設定パラメータに依ります。password_encryption設定パラメータがonの場合に暗号化が有効(default: on)です。

先述した通り、create userSQLはログイン権限オプション(login)を明示しなくても有効となりますし、createuserコマンドでもログイン権限オプション(–login)がデフォルトで有効なので、ここでは指定していません。この辺りのSQLやコマンドの挙動はPostgreSQLバージョンにも依ると思うので自信の無い場合はログイン権限オプションを明示した方がいいかもしれません。