sqlite: Unable to open database file
∞
Today geary couldn’t start up, saying the database was potentially corrupted. There was an option to just rebuild the database file, but as I like my history of emails and didn’t want to download all of them again, I gave up.
At first. :)
As it turned out, there was a weird empty geary.db-journal
file right alongside the database, and it was owned by root
. As geary (and sqlite) couldn’t access it, it couldn’t do any database modifications. (According to https://sqlite.org/tempfiles.html, that file is used for “rollback journals”.)
In the end, I just deleted the file (geary.db-journal
), and geary worked again.
Here’s my approximate debugging session:
# start geary, see an error
# hm...
$ geary --debug
[...]
unable to open database [...] 'CREATE TABLE CorruptionCheckTable (text_col TEXT)'
# hm, let's try it manually
$ sqlite3 ~/.local/share/geary/<my-account>/geary.db
sqlite> CREATE TABLE CorruptionCheckTable (text_col TEXT);
unable to open database
# oops? no idea what's going on, let's do something else/more important
# ...
# search for "sqlite create table error unable to open database file" on the web
# find http://fredericiana.com/2014/11/29/sqlite-error-open-database-file/
# file permissions?!
$ ls -la ~/.local/share/geary/<my-account>/
-rw-r--r-- 1 lu lu 374161408 Feb 2 14:43 geary.db
-rw-r--r-- 1 root root 0 Feb 1 10:18 geary.db-journal
# why is there an empty root-owned file here?
# don't know, let's delete it
$ sudo rm ~/.local/share/geary/<my-account>/geary.db-journal
# and it works again