しゅがーブログ

技術ネタとか書いていけたらな…

PostgreSQLのversion up

PostgreSQLのversion upを実施した時のメモです。

移行前 version : 9.3.1
移行後 version : 9.5.10

version upすることになった経緯

AWSのEC2上で動作していたDBサーバをRDS上へ移して管理を楽にしたいということがありました。
DMS(Database Migration Service)を利用して移行しようとしましたが、DMSがサポートしているPostgreSQLのversionは9.4以降のため使用できないということが発覚。
そのため、一旦versionを上げてから移行する方針となりました。
9.3系のサポートも2018年9月で切れるということもあり。

実際にやったこと

  1. EC2上のDBインスタンスを完全に停止させて、AMIを取得

  2. 取得したAMIから新規にDBインスンタスを作成

  3. 事前に作成しておいたコマンドを投下

9.3.1で動作しているPostgreSQLの停止して、バックアップとして避けておく。

sudo /etc/init.d/postgresql stop
sudo yum -y update
sudo mv /usr/local/pgsql /usr/local/pgsql.old

今回はソースコードからインストールするためPostgreSQLの公式サイトからインストールしたいバージョンを取得。
sslをサポートさせるために--with-opensslオプションをつけておく。
あとは通常のmake installを実施。

cd /usr/local/src
sudo wget https://ftp.postgresql.org/pub/source/v9.5.10/postgresql-9.5.10.tar.gz
sudo tar zxvf postgresql-9.5.10.tar.gz
cd postgresql-9.5.10
./configure --with-openssl
make
make check
sudo make install

物理ファイル保存用のディレクトリを作成。
postgresユーザに変更してpg_upgradeを実行。
シンボリックリンクで切り替えを行ったため短時間で終わります。

sudo mkdir /usr/local/pgsql/data
sudo chown postgres:root /usr/local/pgsql/data
sudo chmod 700 /usr/local/pgsql/data
sudo su -
su - postgres
export PGDATA=/usr/local/pgsql/data
/usr/local/pgsql/bin/initdb -d /usr/local/pgsql/data
/usr/local/pgsql/bin/pg_upgrade -b /usr/local/pgsql.old/bin -B /usr/local/pgsql/bin -d /usr/local/pgsql.old/data -D /usr/local/pgsql/data -k

9.3.1で使用していたpg_hba.confpostgresql.confはそのまま流用しました。

mv /usr/local/pgsql/data/pg_hba.conf /usr/local/pgsql/data/pg_hba.conf.org
mv /usr/local/pgsql/data/postgresql.conf /usr/local/pgsql/data/postgresql.conf.org
cp -ip /usr/local/pgsql.old/data/pg_hba.conf /usr/local/pgsql/data/pg_hba.conf
cp -ip /usr/local/pgsql.old/data/postgresql.conf /usr/local/pgsql/data/postgresql.conf
./analyze_new_cluster.sh

ついでにslave作ったりと色々足りてなかったことも追加で実施しました。

参考

PostgreSQL 9.5.4文書
PostgreSQL9.4 から PostgreSQL9.5 に pg_upgrade する - Qiita