Mattermost v11 で PostgreSQL v13 が Drop された

概要

Mattermost v11 から PostgreSQL v13 のサポートが終了した。

Support for PostgreSQL v13 has been removed. The new minimum PostgreSQL version is v14+. See the minimum supported PostgreSQL version policy documentation for details.

最低のサポートバージョンは PostgreSQL v14 となる。 データベースをダンプし、PostgreSQL v17 にインポートすることで問題を解決した。

DB の更新は初めてなので、記録する。

環境

mattemost/docker を用いて Docker Compose で動作させている。

下記が更新前のバージョンである。

$ cat .env | grep -E "^(POSTGRES_IMAGE_TAG|MATTERMOST_IMAGE_TAG)"
POSTGRES_IMAGE_TAG=13-alpine
MATTERMOST_IMAGE_TAG=release-11

エラー内容

Mattermost v11 に更新して起動すると Mattermost コンテナから PostgreSQL を v14 以上にするようにエラーが出力される。

簡単のためにエイリアスを作成する。

alias mm="docker compose -f ~/container/mattermost/docker-compose.yml -f ~/container/mattermost/docker-compose.without-nginx.yml --env-file ~/container/mattermost/.env"

起動すると下記のエラーが出力される。

$ mm up
...
mattermost-1  | Error: failed to initialize platform: cannot create store: error while checking DB version: minimum Postgres version requirements not met. Found: 13.22, Wanted: 14.0

対応

Upgrade from 10 to 11 postgres update from v.13 db restore issue を参考に DB をダンプして PostgreSQL v17 にインポートする。

既存のデータベースをバックアップしておく。

mm down
cp -a volumes/db{,-$(date -I)}

PostgreSQL コンテナを起動してダンプする。

export $(cat .env | grep -e "^POSTGRES_USER")
export $(cat .env | grep -e "^POSTGRES_DB")
mm up -d postgres
mm exec -it postgres pg_dump ${POSTGRES_DB} -U ${POSTGRES_USER} --no-privileges > ./postgres13-update-backup.sql
mm down

PostgreSQL を v17 に更新して、ダンプしたデータをインポートする。

まず PostgreSQL を v17 に更新する。

perl -pi -e 's|^(POSTGRES_IMAGE_TAG)=.*|$1=17-alpine|' .env

バージョンを確認する。

$ cat .env | grep -E "^(POSTGRES_IMAGE_TAG|MATTERMOST_IMAGE_TAG)"
POSTGRES_IMAGE_TAG=17-alpine
MATTERMOST_IMAGE_TAG=release-11

既存のデータベースを削除して、新しい PostgreSQL v17 コンテナを起動し、ダンプしたデータをインポートする。

rm volumes/db -rf
mm up -d postgres
mm exec -it postgres dropdb ${POSTGRES_DB} -U ${POSTGRES_USER}
mm exec -it postgres createdb ${POSTGRES_DB} -U ${POSTGRES_USER}
mm exec -T postgres psql -U ${POSTGRES_USER} -d ${POSTGRES_DB} < ./postgres13-update-backup.sql
mm down

これで v17 に移行が完了した。起動して確認する。

mm up -d 
mm ps
mm logs -f

curl コマンドで HTTP ステータスコードが 200 であることを確認する。

$ export $(cat .env | grep -E "^APP_PORT")
$ curl -s -o /dev/null -w "%{http_code}\n" localhost:${APP_PORT}
200

メモ

上記に書かれているように、GitLab Omnibus に Mattermost が同梱されなくなる。 そして Mattermost v11 の Team Edition から GitLab SSO が削除される。 GitLab Omnibus の Mattermost を利用している場合は移行の検討が必要である。


変更履歴

2025-11-12: 初稿