メインコンテンツへスキップ

mattermostでDBからメッセージを削除する

·1124 文字·3 分·
著者
gf
目次

状況
#

mattermostでは、ユーザーが削除したメッセージはDB内では削除フラグが立つだけでレコードに残っているので、それを消したい。

関連情報

DBを弄る
#

ver 10.xあたりからmattermostはmysqlを捨ててpostgresに完全移行するらしい。
以下の情報はすべてpostgresを想定している。

  1. DB構造把握
\d channels

\d posts
  1. channel一覧を確認して、削除したくないchannelのidをコピペ
select id, displayname, name from channels;
  1. 投稿をSELECTして確認

以下、参考クエリ。

SELECT message FROM posts
WHERE NOT EXISTS (
    SELECT 1 FROM (VALUES 
    ('削除したくないchannelのidをここに入れていく'),
    ('2つめ'),
    ) AS keep(channelid)
    WHERE posts.channelid = keep.channelid
) LIMIT 20;

日本語で説明すると、どれかひとつでもkeep.channelidと一致するとSELECT 1が返るので、それが返らないpostsのみSELECTする。

  1. 良さげなら、クエリをいじってDELETEに変えて削除
  • 仕事や重要な環境では、DBのバックアップを取って、トランザクションを張りましょう

やっぱ張っとけ 🔗https://www.postgresql.org/docs/current/tutorial-transactions.html

一応軽く説明しておくと、BEGIN(トランザクション開始)してDELETEして、SELECTしてokそうであればCOMMIT(変更確定)、ミスってたらROLLBACK(変更確定しない)でもとに戻せる。

バックアップについては 🔗pg_dump, 🔗pg_dumpall, 🔗pg_basebackupなどを調べてくれ。

Chapter 25. Backup and Restore: 🔗https://www.postgresql.org/docs/current/backup.html
What is recommended way to do a PostgreSQL database backup: pg_dump or pg_basebackup?: 🔗https://stackoverflow.com/questions/62653659/what-is-recommended-way-to-do-a-postgresql-database-backup-pg-dump-or-pg-baseba

おわり
#

mattermostは十分に複雑なソフトウェアなので、DBを抜かれたときの事を考えて定期的にカルマを落としておく必要がある。

関連記事

2025-05-16
·1069 文字·3 分
日記
Docker(docker compose) ローカルでイメージをビルドして、サーバーで起動する
·765 文字·2 分
Docker
ジサツのための101の方法 データ
··2242 文字·5 分
VisualNovel
エロゲのデータを抽出