I just discovered that none of our databases are auto-vacuuming, even though we 
set auto_vacuum to 'incremental' when a database is created, and periodically 
call 'pragma incremental_vacuum'. If I go into the CLI, open a database and run 
"pragma auto_vacuum", it returns 0.

After some experimentation I've discovered that (at least in 3.28) `PRAGMA 
auto_vacuum=incremental` has to be done as the very first thing after creating 
a database, even before `PRAGMA journal_mode=WAL`. I know it's documented that 
auto_vacuum has to be enabled before creating any tables, but the docs say 
nothing about ordering wrt other pragmas!

To be precise, this is what we currently do after creating a new database, 
which does not work:

sqlite3_exec(db, "PRAGMA journal_mode=WAL; "
                     "PRAGMA auto_vacuum=incremental; "    // ⟵ will have no 
effect
                     "BEGIN; "
                     "CREATE TABLE …….. ; "
                     "PRAGMA user_version=302; "
                     "END;");

If I swap the first two statements, it does work:

sqlite3_exec(db, "PRAGMA auto_vacuum=incremental; "    // ⟵ will take effect
                      "PRAGMA journal_mode=WAL; "
                      "BEGIN; "
                     "CREATE TABLE …….. ; "
                     "PRAGMA user_version=302; "
                     "END;");

Is this expected? If so, the docs for auto_vacuum should be updated.

—Jens
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to