PostgreSQL9.5.2をCentOS7へインストールする

メモ:

PostgreSQLのyumリポジトリを利用してPostgreSQLをインストールします。

PostgreSQLのインストール

標準リポジトリからインストールできるPostgreSQLは古いため、PostgreSQLのyumリポジトリを利用して最新バージョンのPostgreSQLをインストールします。 次のコマンドを実行して、PostgreSQLのリポジトリ設定パッケージをダウンロードします。

# wget yum.postgresql.org/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-2.noarch.rpm

※リポジトリの情報は、PostgreSQL RPM Repository (with Yum)にあります。 ダウンロードしたPostgreSQLのリポジトリ設定パッケージのインストールを行います。

# rpm -ivh pgdg-centos95-9.5-2.noarch.rpm

PostgreSQLをインストールします。(インストールしたPostgreSQLのyumリポジトリを参照してくれます。)

# yum -y install postgresql95-server

PostgreSQLをサービスとして登録しPostgreSQLを起動します。

# systemctl enable postgresql-9.5.service
# systemctl start postgresql-9.5.service

上記コマンドを実行するとエラーが吐かれるので指示通りに確認します。

Job for postgresql-9.5.service failed because the control process exited with error code. See "systemctl status postgresql-9.5.service" and "journalctl -xe" for details.
# systemctl status postgresql-9.5.service
postgresql-9.5.service - PostgreSQL 9.5 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-9.5.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Fri 2016-03-25 01:45:36 JST; 1min 7s ago
Process: 4166 ExecStartPre=/usr/pgsql-9.5/bin/postgresql95-check-db-dir ${PGDATA} (code=exited, status=1/FAILURE)

Mar 25 01:45:36 hoge systemd[1]: Starting PostgreSQL 9.5 database server...
Mar 25 01:45:36 hoge systemd[1]: postgresql-9.5.service: control process exited, code=exited status=1
Mar 25 01:45:36 hoge systemd[1]: Failed to start PostgreSQL 9.5 database server.
Mar 25 01:45:36 hoge systemd[1]: Unit postgresql-9.5.service entered failed state.
Mar 25 01:45:36 hoge systemd[1]: postgresql-9.5.service failed.

データベースクラスタの作成が必要という事なので、次のコマンドを実行します。

# /usr/pgsql-9.5/bin/postgresql95-setup initdb
Initializing database ... OK

再度PostgreSQLをサービスとして登録しPostgreSQLを起動します。

# systemctl enable postgresql-9.5.service
# systemctl start postgresql-9.5.service

PostgreSQLのクライアント認証とアクセス制御の設定を行います。 /var/lib/pgsql/9.5/data/にあるpg_hba.confの設定を次のように修正します。

# TYPE    DATABASE        USER           ADDRESS            METHOD
# "local" is for Unix domain socket connections only
local     all             all                               peer
# IPv4 local connections:
host       all             all            127.0.0.1./32      trust
# IPv6  local connections:
#host       all             all             ::1/128               ident

設定する項目は[TYPE][DATABASE][USER][ADDRESS][METHOD]の5つの項目となります。

TYPE
「local」、「host」、「hostssl」、「hostnossl」などの値が入ります。localはUNIXドメインソケット経由の接続、hostはTCP/IP経由の接続、hostsslはSSL経由の接続、hostnosslはSSLを使用しない接続を意味します。
DATABASE
接続を許可したいデータベース名を指定します。「all」と指定すると全てのデータベースを対象とします。また、複数のデータベース名を指定したい場合は、カンマで区切ります。
USER
接続を許可するユーザ名を指定します。「all」と指定すると全てのユーザを意味します。ユーザ名の前に「+」を付けるとグループ名を指定したことになります。複数のユーザ名を指定したい場合は、カンマで区切ります。
ADDRESS
TYPEがlocal以外のときに指定します。接続を許可するクライアントのIPアドレスやネットワークアドレスを指定します。
例1.192.168.0.11からの接続のみを許可する場合、「192.168.0.11/32」と指定します。
例2.IPアドレスが192.168.0.xのクライアントのみを許可する場合、「192.168.0.0/24」と指定します。
例3.任意のIPアドレスのクライアントを許可する場合、「0.0.0.0/0」と指定します。
METHOD
クライアントの認証方式を指定します。代表的なものは次の通りとなります。
trust:認証なし。全ての接続を許可します。
reject:接続を拒否します。特定のホストやネットワークからの接続を拒否する際に使用します。
md5:md5を利用したパスワード認証を行います。パスワードを指定していないユーザは接続できません。
password:BASIC認証を行います。

PostgreSQLのスーパーユーザにパスワードを設定します。

# su - postgres
Last login: Mon Mar 28 19:51:07 JST 2016 on tty1
-bash-4.2$ psql
psql (9.5.1)
Type "help" for help.

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

postgres=# \password postgres
Enter new password:
Enter it again:
postgres=# \q

データベースを作成するには、次のコマンドを実行します

# su - postgres
Last login: Mon Mar 28 19:51:07 JST 2016 on tty1
-bash-4.2$  createdb データベース名

PostgreSQLを再起動してインストールが完了です。