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.serviceExecStart 行を修正。

# 変更前
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;