<PostgreSQL 9.4.4のインストール>

最初、yumでインストールしようとしたが失敗した。PGDATAを2枚目のSSD(/pgdataとしてmount)したいのだが、createdb時にデータの場所(/pgdata)を指定すると、

$ createdb nhs -D "/pgdata" -E UTF-8 -l ja_JP.UTF-8 -T template0

自動起動に失敗する。起動スクリプトにデータの場所を指定しているようで、起動スクリプトの修正の仕方がわからなかった。
PostgreSQLのインストールが終了してからわかったのだが、/lib/systemd/systemにpostgresql-9.4.serviceというスクリプトがあったらしい。それを修正して、

#systemctl disable postgresql-9.4
#systemctl enable postgresql-9.4

と再度設定し直せば、良かったのかもしれない。

いずれにしても、気がついた時にはyumでインストールしたPostgreSQLを削除して、makeしたPostgreSQLをインストールし直した後だったので、手遅れだった。次回インストール時に確認してみたい。

てなわけで、yumでインストールした手順とmake、installした手順、両方記録しておく。

<yumでインストール>

pgdg-centos94-9.4-1.noarch.rpmをダウンロードしてきて、

#rpm -ivh /pub/pgdg-centos94-9.4-1.noarch.rpm

下記を修正。
/etc/yum.repos.d/CentOS-Base.repo
[base]に追記
exclude=postgresql*
[updates]に追記
exclude=postgresql*

http://hkou.hatenablog.com/entry/2015/05/16/162211

#yum install postgresql94-server postgresql94-contrib

.bashrcを編集、下記を追記
PATH="$PATH":/usr/pgsql-9.4/bin

#source ~/.bashrc

#postgresql94-setup initdb
#systemctl start postgresql-9.4
#systemctl status postgresql-9.4

postgresにパスワードを設定する
#passwd postgres

この段階ではpostgresにPostgreSQLのbinがパスが通っていない。root同様.bashrcを編集してパスを追加したいのだが、ホームディレクトリが/var/lib/pgsql/9.4/になっていてデータと同じディレクトリだ。
ホームディレクトリを/home/postgresにしたいので、その設定が必要。「サーバーの更新2」で書いた。

以下、postgresで
#su postgres
$createdb nhs -D "/pgdata" -E UTF-8 -l ja_JP.UTF-8 -T template0

このままrootで
#systemctl enable postgresql-9.4

とやってしまうと、再起動すると、postgresqlの自動起動に失敗する。
起動スクリプトでデータの場所を指定しているらしい。
上記の通り、/lib/systemd/systemにpostgresql-9.4.serviceを編集してから、
#systemctl enable postgresql-9.4
とすること。

yumでインストールすると、initdb時にオプションを指定できないようなのだが、よく分からない。
また、initdbは通常postgresで行うのだが、rootで行う。これで、データディレクトのオーナーはpostgresになるから不思議だ。
initdbはpostgresで

$initdb --no-locale --encoding=UTF8

としたいのだが。この辺がyumだと不安になる。

<ソースからmake、install>
yumで起動スクリプトの修正の仕方がわからなかったので、アンイストールしてしまった後の作業として。

これはこれまでも何回もやっているので、以下、簡単に流れだけ。

下記をダウンロードして解凍。
postgresql-9.4.4.tar.gz

configure前に下記をインストール

#yum install readline readline-devel
#yum install zlib zlib-devel

configureはオプション無し
$ ./configure
$make all
$make install

.bashrcに下記を追加
PATH="$PATH":/usr/local/pgsql/bin
export PGDATA=/pgdata ここでデータの場所を指定する

$source ~/.bashrc

一応、PGDATAが環境変数として設定されているか確認
$printenv

$initdb --no-locale --encoding=UTF8

pg_hba.confの編集。下記を追加
host all all 0.0.0.0/0 trust

postgresql.confの編集(従来これでやってたので)
listen_addresses = '*'
shared_buffers = 160MB
temp_buffers = 40MB
work_mem = 10MB
max_connections = 32 (今回64から変更)

下記は設定がなかった
silent_mode = on

$createdb nhs -D "/pgdata" -E UTF-8 -l ja_JP.UTF-8 -T template0
$psql nhs -e < 150720.nhs データのリストア

$createuser -s tuikasuru_user_mei ユーザーの追加(スーパーユーザーにしないと、Accessでリンクテーブルを作成できなかった)

この後、起動スクリプトをどうするかが問題だった。
ここにサンプルがあったので、データの場所だけ変更して、設定した。

http://maplesystems.co.jp/blog/all/programming/11668.html


[Unit]
Description=PostgreSQL database server
After=network.target

[Service]
Type=forking
PIDFile=/pgdata/postmaster.pid
User=postgres
ExecStart=/usr/local/pgsql/bin/pg_ctl -s -D /pgdata start
ExecStop=/usr/local/pgsql/bin/pg_ctl -s -D /pgdata stop -m fast

[Install]
WantedBy=multi-user.target

これを、「/lib/systemd/systemディレクトリに作成し"postgresql.service"というファイル名にしました。」

#systemctl enable postgresql.service

として登録。再起動して確認

#systemctl --type service