CentOS 7にPostgreSQL 9.4

2015/03/25

PostgreSQL

すでにいろいろなところでまとめられてはいますが、手元環境の構築メモとして残しておきます。 PostgreSQL開発コミュニティ提供のyumリポジトリを使い、DBのディレクトリ(PGDATA)を標準とは別の場所に配置します。 DBファイル作成時(initdb)にロケールなども指定します。

RPMパッケージのインストール

まず、yumリポジトリの設定ファイルをインストールします。 CentOS(RHEL)バージョンとPostgreSQLメジャーバージョンの組み合わせごとに設定用RPMが配布されているので、必要なものを使います。 今回は、CentOS(RHEL) 7のPostgreSQL 9.4用を使います。
# yum install http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-redhat94-9.4-1.noarch.rpm
      (ry...
インストール:
  pgdg-redhat94.noarch 0:9.4-1                                                                      

完了しました!

次に、PostgreSQLのRPMパッケージをインストールします。 指定したのはpostgresql94-server, postgresql94-contribの2つで、あとは依存関係に任せました。
# yum install postgresql94-server postgresql94-contrib
      (ry...
インストール:
  postgresql94-contrib.x86_64 0:9.4.1-1PGDG.rhel7   postgresql94-server.x86_64 0:9.4.1-1PGDG.rhel7  

依存性関連をインストールしました:
  postgresql94.x86_64 0:9.4.1-1PGDG.rhel7        postgresql94-libs.x86_64 0:9.4.1-1PGDG.rhel7       

完了しました!
ネットワーク的に隔離されているなどの理由でyumが使えない場合は、postgresql94postgresql94-libsのRPMファイルも必要ということになります。
postgresql94-contribは必須ではありません。 ただ、いろいろと便利なので、今回はインストールしました。

PGDATAの設定〜DBファイル作成(initdb)〜起動

PGDATAの場所は、systemdのserviceファイルに直書きされているようです。 serviceファイルを/etc配下にコピーし、設定を書き換えます。
# cp -a /lib/systemd/system/postgresql-9.4.service /etc/systemd/system/.
# vim /etc/systemd/system/postgresql-9.4.service
(以下の行を書き換える)
Environment=PGDATA=/path/to/pgdata

デフォルトのロケールや文字コードを変更したい場合、一般的にはinitdbコマンドのオプションとして指定します。 一方、serviceファイルの設定に従ってDBファイルを作成するコマンドとして、postgresql94-setupというのが提供されています。 postgresql94-setup経由でinitdbする際は、PGSETUP_INITDB_OPTIONS環境変数にinitdbのオプションを渡すと良いようです。
# export PGSETUP_INITDB_OPTIONS="-E UTF8 --no-locale -X /path/to/pgxlog" 
# /usr/pgsql-9.4/bin/postgresql94-setup initdb
Initializing database ... OK
今回は、以下の3つを指定しました。
  • -E: DBに格納する文字コード。UTF-8だとあまり気にする必要はないが、EUC-JPの場合は必要。
  • --no-locale: ロケール。
  • -X: WALの格納場所。$PGDATA/pg_xlogがシンボリックリンクになる。
最後に、起動します。
# systemctl start postgresql-9.4.service
# systemctl status postgresql-9.4.service
postgresql-9.4.service - PostgreSQL 9.4 database server
   Loaded: loaded (/etc/systemd/system/postgresql-9.4.service; disabled)
   Active: active (running) since 火 2015-03-24 18:41:33 JST; 56s ago
  Process: 15482 ExecStart=/usr/pgsql-9.4/bin/pg_ctl start -D ${PGDATA} -s -w -t 300 (code=exited, status=0/SUCCESS)
  Process: 15476 ExecStartPre=/usr/pgsql-9.4/bin/postgresql94-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 15486 (postgres)
   CGroup: /system.slice/postgresql-9.4.service
           ├─15486 /usr/pgsql-9.4/bin/postgres -D /path/to/pgdata
           ├─15487 postgres: logger process   
           ├─15489 postgres: checkpointer process   
           ├─15490 postgres: writer process   
           ├─15491 postgres: wal writer process   
           ├─15492 postgres: autovacuum launcher process   
           ├─15493 postgres: archiver process   
           └─15494 postgres: stats collector process   

      (ry...

補足・参考

自動起動したければ、普通にsystemctl enableです。
ちゃんとやるなら、SELinuxの設定とかもあると思います。 手元の環境では、SELINUX=disabled しています。

QooQ