在 SQLite 3.7 中启用 WAL(预写日志记录)(这是 iOS 7 上 Core Data 的默认设置)时,如何将 -wal 文件中的内容合并/提交回主数据库文件中?
从命令行执行以下操作:
sqlite3 MyDatabase.sqlite
VACUUM;
完成!
-wal 文件现在的大小应该为 0,并且所有内容都应该位于主数据库文件中。
在应用程序“DB Browser for SQLite”中打开数据库并在Journal Mode之间从“WAL”切换到“Off”,然后点击“Apply”按钮,然后切换回“WAL”。
我尝试过 VACUUM 和 Checkpoint 选项,但它们都不适合我。
@Blazej 的回答引导我找到了正确的解决方案。总而言之,您需要执行以下操作
先决条件:确保该目录同时包含 .sqlite 文件和 -wal 文件。
选项1:使用sqlite3命令
从终端键入以下命令。确保数据库未从您的应用程序(关闭您的应用程序)或任何外部应用程序连接,例如:“DB Browser for SQLite”。如果数据库从多个服务连接,数据库将被锁定,您无法更改其设置。
sqlite3 <database_name>.sqlite
这将向您显示“sqlite>”提示。
PRAGMA journal_mode = OFF;
现在您可以看到 -wal 文件从目录中消失,并且主数据库 .sqlite 文件大小增加了。
PRAGMA journal_mode=WAL;
这会将数据库文件journal_mode更改回WAL。
选项 2:使用“DB Browser for SQLite”应用程序
确保数据库未从您的应用程序(关闭您的应用程序)或任何其他服务(如 sqlite3 命令)连接。如果数据库从多个服务连接,数据库将被锁定,您无法更改其设置。
启动“DB Browser for SQLite”并打开数据库文件。
转到“编辑指令”->“日志模式”并将其值设置为“关闭”
现在您可以看到 -wal 文件从您的目录中消失,并且主数据库 .sqlite 文件大小增加了。