0

sqlite3 データベースに裏打ちされたキャッシュを構築しています。使用するディスク容量を制限するために、db ファイルのサイズを定期的にチェックしています。最大制限を超えている場合は、最も古いアイテムを一括削除してバキュームし、サイズが最大の 80% を下回るまで繰り返します。

ただし、バキューム直後はファイル サイズが変化していないため、通常、サイズが小さくなる前にテーブル全体を削除することになります。すべての呼び出しはSQLITE_OK、どこにも見られるエラーなしで返されます。

while (too_many_rows) {
    // delete N rows
    sqlite3_exec(database, "VACUUM;", NULL, NULL, &error);
    sqlite3_close(database);
    // check file size
    printf("%d deleted, new size %d KB\n", N, size);
}

次のようなものを生成します。

200 deleted, new size 400 KB
200 deleted, new size 400 KB
200 deleted, new size 360 KB
200 deleted, new size 360 KB
156 deleted, new size 360 KB
0 deleted, new size 360 KB
0 deleted, new size 360 KB
0 deleted, new size 360 KB
0 deleted, new size 360 KB
0 deleted, new size 16 KB

バキュームが終了したことを確認するにはどうすればよいですか?また、ファイル サイズを再度確認するにはどうすればよいですか?

sqlite は教えてくれたり、ブロックさせたりできますか? 何かを使用する必要がありますinotifyか?

4

0 に答える 0