【问题标题】:SQLite occasionally fails to create :memory: databaseSQLite 偶尔无法创建 :memory: 数据库
【发布时间】:2015-03-03 17:58:55
【问题描述】:

在我们的单元测试套件中,我们创建和销毁了大量使用":memory:" 路径的SQLite 数据库。有时,仅当在 iOS 模拟器上运行时,这些数据库的创建会失败并显示相当神秘的消息:

Database ":memory:": unable to open database file

99% 的时间,这些请求都会成功。 (发生此故障后,同一测试运行中的后续测试通常会成功。)但是当您在自动构建验收测试中使用它时,您需要 100%。

我们已针对内存消耗(在正常范围内)和磁盘空间可用性(20GB+ 可用)进行了检测。

有什么想法吗?

更新:根据下面 Richard 的建议,通过额外的日志记录捕获了这种情况。这是日志输出:

SQLITE ERROR: (28) attempt to open "/Users/xxx/Library/Developer/CoreSimulator/Devices/CF762060-7D23-4C79-A466-7F20AB6233E7/data/Containers/Data/Application/582E1ED0-81E0-4CC7-A6F6-DBEBC101BBE8/tmp/etilqs_1ghbf1MSTa8ilSj" as
SQLITE ERROR: (14) cannot open file at line 30595 of [f66f7a17b7]
SQLITE ERROR: (14) os_unix.c:30595: (17) open(/Users/xxx/Library/Developer/CoreSimulator/Devices/CF762060-7D23-4C79-A466-7F20AB6233E7/data/Containers/Data/Application/582E1ED0-81E0-4CC7-A6F6-DBEBC101BBE8/tmp/etilqs_1ghbf1MST

【问题讨论】:

    标签: ios sqlite xcode6


    【解决方案1】:

    我注意到,如果您创建一个临时表,即使是 :memory: 数据库也会将文件存储在磁盘上。 unix 系统的临时文件是由 Prng 构建的,因此如果同时创建大量临时文件,则名称冲突的可能性非零。或者,如果磁盘已满,则创建可能会失败。或者如果由于某种原因无法访问 unix 临时目录,因为它已被删除或权限无效。

    例如,我通过将以下命令行参数添加到 llvc-gcc,在 sqlite3 命令行中打开了几个记录器: -DSQLITE_DEBUG_OS_TRACE=1 -DSQLITE_TEST=1 -DSQLITE_DEBUG=1 然后我观察到一个临时文件是从使用此 SQL 的命令行:

    $ ./sqlite3 SQLite 版本 3.8.8.2 2015-01-30 14:30:45 输入“.help”获取使用提示。 连接到临时内存数据库。 使用“.open FILENAME”在持久数据库上重新打开。 sqlite> 创建临时表 t( x ); OPENX 3 /var/folders/nf/l1cw8sn1707b73zy5nqycrpw0000gn/T//etilqs_fvwR6KbMm518S4w 01002 公开赛 3
    写 3 512 0 0 OPENX 4 /var/folders/nf/l1cw8sn1707b73zy5nqycrpw0000gn/T//etilqs_OJJJ1lrTtQIFnUO 05402 开放 4
    写 4 1024 0 0 写 4 1024 1024 0 写 3 28 0 0 sqlite>

    【讨论】:

      【解决方案2】:

      没有想法。但也许如果你打开error and warning log它会提供一些线索。

      【讨论】:

      • 谢谢,会试试的。
      • FWIW 我觉得奇怪的是它似乎试图打开磁盘上的文件,即使我已将 :memory: 指定为数据库路径。
      猜你喜欢
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      • 2021-07-19
      • 1970-01-01
      相关资源
      最近更新 更多