【问题标题】:Can a Core Data .sqlite backup without a WAL file be restored to operate in WAL mode?可以恢复没有 WAL 文件的 Core Data .sqlite 备份以在 WAL 模式下运行吗?
【发布时间】:2018-05-16 20:49:54
【问题描述】:

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

【问题讨论】:

    标签: ios sqlite core-data restore wal


    【解决方案1】:

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

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

    【讨论】:

    • 太棒了。谢谢。
    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    相关资源
    最近更新 更多