如何将SQLite 3.7 WAL文件的内容合并到主数据库文件中

问题描述 投票:0回答:4

在 SQLite 3.7 中启用 WAL(预写日志记录)(这是 iOS 7 上 Core Data 的默认设置)时,如何将 -wal 文件中的内容合并/提交回主数据库文件中?

sqlite core-data ios7 swiftdata wal
4个回答
50
投票

从命令行执行以下操作:

  1. sqlite3 MyDatabase.sqlite
  2. VACUUM;
  3. CTRL-D 退出 sqlite 控制台。

完成!

-wal 文件现在的大小应该为 0,并且所有内容都应该位于主数据库文件中。


44
投票

执行checkpoint,即执行PRAGMA wal_checkpoint


4
投票

在应用程序“DB Browser for SQLite”中打开数据库并在Journal Mode之间从“WAL”切换到“Off”,然后点击“Apply”按钮,然后切换回“WAL”。


1
投票

我尝试过 VACUUM 和 Checkpoint 选项,但它们都不适合我。

@Blazej 的回答引导我找到了正确的解决方案。总而言之,您需要执行以下操作

先决条件:确保该目录同时包含 .sqlite 文件和 -wal 文件。

选项1:使用sqlite3命令

从终端键入以下命令。确保数据库未从您的应用程序(关闭您的应用程序)或任何外部应用程序连接,例如:“DB Browser for SQLite”。如果数据库从多个服务连接,数据库将被锁定,您无法更改其设置。

  1. sqlite3 <database_name>.sqlite

这将向您显示“sqlite>”提示。

  1. PRAGMA journal_mode = OFF;

现在您可以看到 -wal 文件从目录中消失,并且主数据库 .sqlite 文件大小增加了。

  1. PRAGMA journal_mode=WAL;

这会将数据库文件journal_mode更改回WAL。

选项 2:使用“DB Browser for SQLite”应用程序

确保数据库未从您的应用程序(关闭您的应用程序)或任何其他服务(如 sqlite3 命令)连接。如果数据库从多个服务连接,数据库将被锁定,您无法更改其设置。

  1. 启动“DB Browser for SQLite”并打开数据库文件。

  2. 转到“编辑指令”->“日志模式”并将其值设置为“关闭”

现在您可以看到 -wal 文件从您的目录中消失,并且主数据库 .sqlite 文件大小增加了。

  1. 将设置更改回来,转到“Edit Pragmas”->“Journal mode”并将其值设置为“WAL”
© www.soinside.com 2019 - 2024. All rights reserved.