CentOS 7.3にインストールしたPostgreSQL 9.4から9.6へアップデートする

CentOS 7.3にインストールしたPostgreSQL 9.49.6へアップデートしました。
PostgreSQL 9.4ははオフィシャルサイトで提供されているpgdgレポジトリをつかってパッケージインストールしてあります。
9.6も同じくpgdgを使ってインストールします。
昔といっても6年くらい前は、パッケージインストールすると複数バージョンのインストールができない記憶があったのですが、最近は複数バージョンの共存が可能になっております。

事前作業

9.6のインストールを行う前に9.4のバックアップを取得します。
特にデータベースのスキーマー等は変更しないので今回はpg_dumpallを使ってバックアップを取得9.6へリストアすることにしました。
また、プロダクション環境ではバックアップしたファイルを他ユーザーから見られないようにパーミッションを適切にする必要があります。

### バックアップを取得する
su - postgres
mkdir work
pg_dumpall -c > work/20170218_pg94_dumpall.dump
file work/20170218_pg94_dumpall.dump

PostgreSQL 9.6のインストールと初期設定

PostgreSQL 9.6をインストールします。

### PostgreSQL 9.6 レポジトリをインストールする
yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
# レポジトリがインストールされたか確認する
yum list | grep postgresql96

### PostgreSQL 9.6をインストールする
yum install postgresql96-server

### psqlとpg_dumpが9.6を参照しているか確認する
alternatives --display pgsql-psql
alternatives --display pgsql-pg_dump

特にエラーがでなければインストールは完了しているので初期設定を行います。
9.4ではデフォルトエンコーディングをUTF8、ロケールは設定しない(C)にしていたので同じ設定を踏襲します。

PGSETUP_INITDB_OPTIONS="--encoding=UTF8 --no-locale" /usr/pgsql-9.6/bin/postgresql96-setup initdb

### postgresql.confを修正する

PostgreSQL 9.4を停止

PostgreSQL 9.65432ポートで起動するので9.4のサービスを停止しておきます。

systemctl stop postgresql-9.4
# 停止されているか確認する
systemctl status postgresql-9.4

PostgreSQL 9.6を起動しデータをリストアする

systemctl start postgresql-9.6
# 起動したか確認する
systemctl status postgresql-9.6

### データを展開する
su - postgres
psql -d postgres -f work/20170218_pg94_dumpall.dump 2>&1 | tee work/restored.log
# 正しくデータベースがリストアされているか確認する

### 事故が起きないようにバックアップファイルをリネームする(もしくは削除する)
mv work/20170218_pg94_dumpall.dump work/_20170218_pg94_dumpall.dump

自動起動とyumレポジトリの設定を行う

正しくデータがリストアできたら自動起動の設定を行います。

### 自動起動の設定を行う。
systemctl disable postgresql-9.4
systemctl enable postgresql-9.6
# 正しく設定されているか確認する
systemctl list-unit-files --type=service | grep postgresql

### PostgreSQL 9.4のレポジトリを無効にする
sed -i -e 's|enabled=1|enabled=0|g' /etc/yum.repos.d/pgdg-94-centos.repo

まとめ

簡単ですがPostgreSQL 9.4から9.6へアップデートした手順を書きました。

参考にさせていただいたページ