我已经约SQLite的真空(也可能是WAL)两个问题打开成功?真空的SQLite从多个进程
•为什么VACUUM有时不起作用(没有空间回收),但Sqlite返回SQLITE3_OK?
多一点细节我的问题:
我在由2个进程访问WAL模式已经数据库。在某些时候,用户可以选择从数据库中删除数据。因为数据库可以通过多个进程打开,所以我删除记录,然后运行VACUUM来回收磁盘空间(而不是关闭连接并删除文件)。
问题是,如果两个进程打开了数据库连接,则其中一个进程的VACUUM返回OK,但并不真正回收空间。
我想会发生什么事情,直到有任何未完成的SQL语句来自任何进程,VACUUM才会成功。问题是我不想让这两个进程意识到对方。
我正在考虑的是从两个进程中进行VACUUM,以便最后关闭连接(根据用户请求删除数据)进行空间回收。我也在考虑auto_vacuum(我知道它的局限性,但删除操作并不在此数据库上非常频繁
找出为什么没有来自真空调用的SQLite错误仍然很有趣。 –
如果它返回SQLITE_OK,它确实确实做了一个真空。 –
虽然磁盘上的文件大小保持不变,但检查了很多次。 –