可以将没有 WAL 文件的 Core Data .sqlite 备份恢复为在 WAL 模式下运行吗?

Can a Core Data .sqlite backup without a WAL file be restored to operate in WAL mode?

请耐心等待 - 我将尝试在这个问题中使用正确的术语。我有一个 iOS 应用程序,多年来一直允许用户创建其核心数据支持的 .sqlite 数据库的备份。出于某种原因,回想起来,我将 journal_mode 的 pragma 选项设置为 "MEMORY",这意味着过去几年所做的每个备份都没有 WAL 或 SHM 文件.我正在重写我所有的数据库代码,并且我知道 iOS 的当前默认值 journal_mode 是“WAL”。当我导入一个用 journal_mode "MEMORY" 制作的备份时,我想以某种方式结束该文件在 WAL 模式下运行(我希望所有新备份都相同 - 在 WAL 模式下)但是我不确定这是否可能。是否可以强制从未有过 WAL 或 SHM 文件的单个 .sqlite 开始创建它们?我正在尝试使用 NSPersistentStore 方法来创建备份和恢复数据,我记得读过整个过程中使用的选项(即 journal_mode)需要保持一致(我将 post link 如果我能找到的话)。我相信,因为我没有 WAL 文件,所以我需要使用 "MEMORY" 或 "DELETE" journal_mode 进行导入。但是,我不确定这是否意味着该文件将永远必须在没有 WAL 文件的情况下运行,或者我是否可以做些什么来让它在 WAL 模式下运行。我希望这是有道理的——这让我有点困惑,但如果有任何关于如何解决这个问题的想法,我将不胜感激。

您可以随时更改数据库的日志模式,只要您具有独占访问权限;只需打开它,然后执行 PRAGMA。 (事实上​​,这是启用WAL模式的唯一方法。)

请注意,只有WAL模式是永久保存在数据库文件中的;任何其他日志模式是连接的 属性;非文件WAL打开时默认为DELETE模式