使用 SQLite 数据库的 Mac 应用程序在 10.9 Mavericks 中创建了三个数据库

Posted

技术标签:

【中文标题】使用 SQLite 数据库的 Mac 应用程序在 10.9 Mavericks 中创建了三个数据库【英文标题】:Mac Application using SQLite database has three databases created in 10.9 Mavericks 【发布时间】:2013-11-06 23:31:08 【问题描述】:

我有一个使用 sqlite 作为数据库的 Mac 应用程序。在 OSX 10.7 和 10.8 上,当应用程序启动时,它会创建一个文件作为数据库存储:appName.sqlite

升级到 10.9 Mavericks 后,我注意到当我启动我的应用程序时,它现在创建了三个文件。

appName.sqlite appName.sqlite-shm appName.sqlite-wal

我假设它们是某种临时文件,但我无法打开它们中的任何一个。据我了解 10.9 Mavericks,SQLite 已经更新,我想知道这种行为是否相关。

任何见解都会非常有帮助。

谢谢

【问题讨论】:

What are the .db-shm and .db-wal extensions in Sqlite databases?的可能重复 是的,后两个是 SQLite 创建的文件。一个是预写日志(从旧版本的 SQLite 更改的行为)。您可以通过设置 journal_mode=DELETE 的 persistentStore 选项来禁用此功能。另一个由驱动程序用于管理对共享内存的访问。在 www.sqlite.org 上阅读更多内容。在大多数情况下,只需忽略它们,或者如果它们可能会让用户感到困惑,那么就恢复到旧的日记模式。 谢谢邓肯,你的回答把我带到了这个developer.apple.com/library/mac/releasenotes/DataManagement/… 【参考方案1】:

Duncan 的回复让我找到了正确的方向,我做了更多的研究,结果发现版本说明中的答案是正确的......

https://developer.apple.com/library/mac/releasenotes/DataManagement/WhatsNew_CoreData_OSX/

Mavericks 对默认 SQLite 行为进行了以下更改,这导致了我的问题...

“Core Data SQLite 持久存储将默认在 10.9 或之后链接的所有应用程序上使用 WAL journal_mode。这种模式提供了比经典 SQLite 回滚(删除)日志更好的可靠性和性能。但是,不推荐使用 WAL journal_mode用于只读数据库文件,或需要与 OS X v10.6 或更早版本互操作的文件。”

【讨论】:

以上是关于使用 SQLite 数据库的 Mac 应用程序在 10.9 Mavericks 中创建了三个数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mac 中使用 sqlite3 命令 shell 定位 sqlite 数据库?

Image Wells、Core Data 和 Sqlite 文件

Electron JS + SQLite 数据库

如何强制更新 CoreData SQLite 数据库?

sqlite 的基本使用1

在电子生产模式下将 SQLITE db 文件存储在哪里?