犬ターネット

sqlite3 の dump と import と auto_vacuum

2012-04-26 sqlite

db の内容を dump するには以下。dump.sql にSQLが出力される。

$ sqlite3 db
sqlite> .output dump.sql
sqlite> .dump
sqlite> .exit

dump.sql を db_new に import するには以下。

$ sqlite3 db_new
sqlite> .read dump.sql

auto_vacuum は「PRAGMA auto_vacuum = 1」を実行すればできるはずなんだけど、いくらやっても設定できない。

$ sqlite3 db
sqlite> PRAGMA auto_vacuum = 1;
sqlite> PRAGMA auto_vacuum;
0 ←0のまま...

で、auto_vacuum のドキュメントをちゃんと読んでみると、

Therefore, auto-vacuuming must be turned on before any tables are created.
It is not possible to enable or disable auto-vacuum after a table has been created.

なるほど、テーブル作る前に実行しろと... ということで、CREATE TABLE 実行するまえに PRAGMA auto_vacuum = 1 したら設定できた。

$ sqlite3 db_new
sqlite> PRAGMA auto_vacuum = 1;
sqlite> PRAGMA auto_vacuum;
1

ちなみに、auto_vacuum が 1 or 2 の場合は、

sqlite> VACUUM; PRAGMA auto_vacuum=0;

みたいにすれば auto_vacuum を 0 に戻せる。逆はできない。

windows7 で wget 使う
mod_speling