PostgreSQL をアップグレードする

Mastodon

Mastodon が動いているのは LXC(CT)の Ubuntu 22.04。これも 24.04 にアップグレードしようと思ったけれど、単純に sudo do-release-upgrade を実行しただけではダメで、少し工夫が必要。で、とりあえず PostgreSQL 14 を 16 にアップグレードしておいた。実際には sudo do-release-upgrade を実行すると PostgreSQL 16 がインストールされるから、後からでも何とかなりそうだけど。

参考にしたサイトは Directed Ignorance の記事 Upgrading PostgreSQL 14 to 16 on Ubuntu

 

リポジトリの追加とインストール

sudo apt install -y postgresql-common
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
apt install postgresql

 

クラスターの確認

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory              Log file
14  main    5432 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log
16  main    5433 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16-main.log

使用中のクラスター 14 は port 5432 で待ち受けている。

 

クラスター 16 の削除

sudo pg_dropcluster 16 main --stop

このあと使用中のクラスタ 14 を 16 にアップグレードするから、インストールされたクラスタ 16 を削除しておく。

 

クラスター 14 を 16 にアップグレード

$ sudo pg_upgradecluster 14 main
Stopping old cluster...
Restarting old cluster with restricted connections...
Notice: extra pg_ctl/postgres options given, bypassing systemctl for start operation
Creating new PostgreSQL cluster 16/main ...
/usr/lib/postgresql/16/bin/initdb -D /var/lib/postgresql/16/main --auth-local peer --auth-host scram-sha-256 --no-instructions --encoding UTF8 --lc-collate ja_JP.utf8 --lc-ctype ja_JP.utf8
データベースシステム内のファイルの所有者はユーザー"postgres"となります。
このユーザーをサーバープロセスの所有者とする必要があります。

データベースクラスタはロケール"ja_JP.utf8"で初期化されます。
initdb: ロケール"ja_JP.utf8"用の適切なテキスト検索設定が見つかりませんでした
デフォルトのテキスト検索構成は simple に設定されます。

データベージのチェックサムは無効です。

ディレクトリ/var/lib/postgresql/16/mainの権限を設定しています ... ok
サブディレクトリを作成しています ... ok
動的共有メモリの実装を選択しています ... posix
デフォルトのmax_connectionsを選択しています ... 100
デフォルトのshared_buffersを選択しています ... 128MB
デフォルトの時間帯を選択しています ... Asia/Tokyo
設定ファイルを作成しています ... ok
ブートストラップスクリプトを実行しています ... ok
ブートストラップ後の初期化を実行しています ... ok
データをディスクに同期しています ... ok

Copying old configuration files...
Copying old start.conf...
Copying old pg_ctl.conf...
Starting new cluster...
Notice: extra pg_ctl/postgres options given, bypassing systemctl for start operation
Running init phase upgrade hook scripts ...

Roles, databases, schemas, ACLs...
 set_config 
------------
 
(1 行)

 set_config 
------------
 
(1 行)

 set_config 
------------
 
(1 行)

 set_config 
------------
 
(1 行)

Fixing hardcoded library paths for stored procedures...
Upgrading database postgres...
Fixing hardcoded library paths for stored procedures...
Upgrading database mastodon_production...
Fixing hardcoded library paths for stored procedures...
Upgrading database template1...
Stopping target cluster...
Stopping old cluster...
Disabling automatic startup of old cluster...
Starting upgraded cluster on port 5432...
Running finish phase upgrade hook scripts ...
vacuumdb: データベース"mastodon_production"の処理中です: 最適化のための情報を最小限生成します(1対象)
vacuumdb: データベース"postgres"の処理中です: 最適化のための情報を最小限生成します(1対象)
vacuumdb: データベース"template1"の処理中です: 最適化のための情報を最小限生成します(1対象)
vacuumdb: データベース"mastodon_production"の処理中です: 最適化のための情報を複数生成します(10対象)
vacuumdb: データベース"postgres"の処理中です: 最適化のための情報を複数生成します(10対象)
vacuumdb: データベース"template1"の処理中です: 最適化のための情報を複数生成します(10対象)
vacuumdb: データベース"mastodon_production"の処理中です: 最適化のための情報をデフォルト数(全て)生成します
vacuumdb: データベース"postgres"の処理中です: 最適化のための情報をデフォルト数(全て)生成します
vacuumdb: データベース"template1"の処理中です: 最適化のための情報をデフォルト数(全て)生成します

Success. Please check that the upgraded cluster works. If it does,
you can remove the old cluster with
    pg_dropcluster 14 main

Ver Cluster Port Status Owner    Data directory              Log file
14  main    5433 down   postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log
Ver Cluster Port Status Owner    Data directory              Log file
16  main    5432 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16-main.log

無事にアップグレードされたクラスター 16 が port 5432 で待ち受ける設定になっている。
この時点でサイトにアクセスしてみて正常に動作していることを確認する。

 

クラスター 14 の削除と確認

$ sudo pg_dropcluster 14 main
$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory              Log file
16  main    5432 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16-main.log

無事に更新できた。

 

不要なパッケージの削除

sudo apt remove --purge postgresql-14 postgresql-client-14

 

次は Ruby のアップグレードを調べてみよう。