我正在尝试通过在我的iOS应用程序中删除我的sqlite数据库中的记录来减小数据库的大小,但是大小将保持不变(与数据库关联的所有文件的大小,即.sqlite文件, .sqlite-shm文件和.sqlite-wal文件)。我已经读过这是预期的行为(参考:change sqlite file size after "DELETE FROM table")。此链接建议使用sqlite“vacuum”工具,这应该清理未使用的内存片段。但是,通过执行此操作,这会在磁盘内存(更具体地说,.sqlite-wal文件)的回滚中分配大量内存。所以这没有用,因为与数据库关联的文件的总大小没有减少。
我想知道在这种情况下是否有人知道该怎么办?任何帮助表示赞赏。
由于
JB
答案 0 :(得分:0)
您可以在持久性商店协调员的初始化中禁用Write ahead logging(sqlite-wal)(通常在appdelegate中)(检查堆栈溢出或谷歌)。这意味着对SQL数据库所做的任何更改都会立即反映在您设备上的磁盘上,就像您期望的那样。
它可能看起来像这样:
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeURL
options:@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES, NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"}}
error:&error])