にせねこメモ

はてなダイアリーがUTF-8じゃないので移ってきました。

MattermostにSlackのログをインポートしようとしたらpq: invalid byte sequence for encoding "UTF8": 0x00というエラーが出て止まったが元データが原因だった

MattermostへのSlackログのインポート

Migration guide — Mattermost documentation
このページのMigrate from Slackの手順にしたがってSlackのエクスポート形式からMattermostのbulk export形式に変換し、mmctlを使ってアップロード・インポートを行おうとした。

Slackログの変換やMmctlは、Mattermostのサーバーとは別のPCで実行しているが、ローカルネットワークで接続されている。

問題

mmctl job show <job-id>

で見ると次のような文面が含まれていた。

error:We could not count the users. — importMultiplePostLines: Unable to save the Post., failed to save Post: pq: invalid byte sequence for encoding "UTF8": 0x00

どうやらPostgreSQLに記録しようとした文字列に0x00という不正なバイトが含まれていたらしい。

よくわからなかったのでjsonlファイルを半分半分にして2分探索していったところ、\u0000という文字列が(何度も)含まれる発言が1つあった。なので、その中の\u0000をすべて削除したところ、インポートはうまくいった。

結局、大元のSlackのエクスポートファイルにも\u0000存在していたので、謎ではあるが、mmetlやMattermostは悪くなさそうという結論になった。

そのほか

2分探索で原因を探るために大量のインポート用のzipファイルをMattermostにアップロードしてしまったので、これを消したい。
Dockerでインストールした場合、mmctl import uploadでアップロードしたファイルは(コンテナ外から見て)volumes/app/mattermost/data/importにあるので、普通に消せばいい気がする。