この記事は1年以上前の古い記事です。現状に即していない記述の場合があります。あらかじめご了承ください。
Minetest mapserverをsqlite3と使うときはジャーナルモードをwalにする

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 "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に移行するしかないと思う。