Skip to content

PostgreSQL バージョンアップ手順

pg_upgradeコマンドを使った PostgreSQL のバージョンアップ手順です。例として 12 -> 13 の手順を記載します。

事前準備

バックアップを取る

WIP

バージョンアップ手順

リポジトリの追加

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

GPG 鍵の追加

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

パッケージの更新

sudo apt-get update

新しいバージョンのインストール

sudo apt-get install postgresql-13

新しいバージョンのクラスタサービスが起動していることを確認

systemctl status postgresql@13-main.service

サービスの状態を確認(enabledであれば OK)

systemctl is-enabled postgresql

サービスの停止

sudo systemctl stop postgresql.service

postgres ユーザになる

sudo su - postgres

アップグレード実施

 /usr/lib/postgresql/13/bin/pg_upgrade \
     --old-datadir=/var/lib/postgresql/12/main \
     --new-datadir=/var/lib/postgresql/13/main \
     --old-bindir=/usr/lib/postgresql/12/bin \
     --new-bindir=/usr/lib/postgresql/13/bin \
     --old-options '-c config_file=/etc/postgresql/12/main/postgresql.conf' \
     --new-options '-c config_file=/etc/postgresql/13/main/postgresql.conf'

一般ユーザに戻る

exit

新しいバージョンのpostgresql.confについてポート番号などを変更

sudo vim /etc/postgresql/13/main/postgresql.conf

port = 5433になっているため、port = 5432とすれば OK。また、listen_addressesについてもコメントアウトを外し、localhost -> *に変更

古いバージョンについても同様にポート番号などを変更

sudo vim /etc/postgresql/12/main/postgresql.conf

port = 5432 -> port = 5433

また、必要であればpg_hba.confについても新しいファイルに設定を追記

sudo vim /etc/postgresql/13/main/pg_hba.conf

サービスを起動

sudo systemctl start postgresql.service

postgres ユーザに戻り、psqlなどで接続先が新しいバージョンになっていることを確認

オプティマイザの統計情報を収集

./analyze_new_cluster.sh

古いバージョンの削除

sudo apt-get remove postgresql-12
sudo rm -rf /etc/postgresql/12/

postgres ユーザにてdelete_old_cluster.shを実行

sudo su - postgres
./delete_old_cluster.sh