Mattermost 11系にバージョンアップ
Mattermost 11系 にバージョンアップ作業において、mysqlからPostgreSQLにMigrate後、Mattemostをアップデートしました。PostgreSQL 16環境でのハマりポイントと解決策(移行環境向け)を記録しておく。
本家サイト:Mattemost本家
Mattermost on apche:https://linuxexpert.ne.jp/983.html
# sudo -u mattermost /opt/mattermost/bin/mattermost version
Version: 11.2.1
Build Number: 20258648388
Build Date: Tue Dec 16 06:32:15 UTC 2025
Build Hash: b1c3f7142bbbd1584980c7f0942cf58a0ac64415
Build Enterprise Ready: true環境
- OS: RHEL系 (AlmaLinux/Rocky Linux 等)
- DB: PostgreSQL 16.11
- Mattermost: Enterprise Edition (Team Edition) 最新版
1. 必須拡張機能 pg_trgm の導入
Mattermostの検索パフォーマンス向上のため、PostgreSQL側で pg_trgm が必須となっていますが、初期状態ではインストールされていませんでした。
エラー内容:
ERROR: extension "pg_trgm" is not available
解決策: OSに contrib パッケージを入れた上で、DBで有効化する必要がありました。
# OS側(RHEL系の場合)
sudo dnf install postgresql16-contrib
BASH
-- psqlで接続して実行
CREATE EXTENSION IF NOT EXISTS pg_trgm;
SQL
2. Systemd 起動コマンドの変更
バイナリを置き換えて起動したところ、ログにヘルプメッセージだけが表示されて終了してしまう現象が発生。
原因: 新しいバージョンでは、起動コマンドに server というサブコマンドの指定が必須になっていました。
解決策: /etc/systemd/system/mattermost.service の ExecStart 行を修正。
# 変更前
ExecStart=/opt/mattermost/bin/mattermost
# 変更後(末尾に server を追加)
ExecStart=/opt/mattermost/bin/mattermost server
3. DBマイグレーションのスペルミス不整合
起動時のDBマイグレーション処理で、Duplicate key エラーが発生して停止。
エラー内容:
originalError: pq: duplicate key value violates unique constraint "idx_xxxxx_PRIMARY"
... INSERT INTO db_migrations (version, name) VALUES (92, 'add_createat_to_teamembers')
原因: システムが期待するマイグレーション名 (teamembers: mが1つ) と、DB内に記録されていた過去のマイグレーション名 (teammembers: mが2つ) でスペルが異なっており、「未実行」と判定されて再実行しようとしていました。
解決策: DB内の記録をシステム側の期待するスペル(mが1つ)に合わせることで解決しました。
UPDATE db_migrations SET name = 'add_createat_to_teamembers' WHERE version = 92;
4. JSON型とJSONB型の不一致
上記を解決後、さらに別のエラーが発生。
エラー内容:
originalError: pq: function jsonb_to_recordset(json) does not exist
原因: PostgreSQLには json 型と jsonb 型がありますが、Mattermostは jsonb (バイナリ形式) を推奨しています。 おそらく過去にMySQLから移行した際の名残で、一部のテーブルのカラムが古い json 型のままになっており、新しいバージョンで使用される関数 (jsonb_to_recordset) が型不一致で動作しませんでした。
解決策: 対象カラムの型を jsonb に変換しました。
-- PropertyFields テーブル
ALTER TABLE propertyfields ALTER COLUMN attrs TYPE jsonb USING attrs::jsonb;
-- PropertyValues テーブル
ALTER TABLE propertyvalues ALTER COLUMN value TYPE jsonb USING value::jsonb;
