Minetest mapserverをsqlite3と使うときはジャーナルモードをwalにする

nogajun
nogajun

また、Minetestネタです。

Minetest 5.5になってから手元で動かしていたmapserverが動かなくなりました。これは、5.5でワールドのデータベースが圧縮されるようになったせいで報告するとすぐに直してもらえました。

それで試していたら微妙なエラーメッセージが出るので再度報告したら、「sqlite3のコマンドラインからジャーナルモードは変更してみた?」と聞かれたので試してみました。

方法は、sqlite3コマンドからmap.sqliteを開いて、PRAGMA journal_mode=wal;とするだけ。

$ sqlite3 ~/.var/app/net.minetest.Minetest/.minetest/worlds/mapserver-test/map.sqlite 
SQLite version 3.38.2 2022-03-26 13:51:10
Enter ".help" for usage hints.
sqlite> PRAGMA journal_mode;
delete
sqlite> PRAGMA journal_mode=wal;
wal

これでメッセージは出なくなりました。

それで、sqliteのジャーナルモードについて解説があったので読んでみると、walは頻繁に読み書きするときにはdeleteより有利っぽい。何かあったときの障害に弱そうだけど、そうなったらPostgreSQLに移行するしかないと思う。