当我指定数据库位于/tmp/a
时,我在SQLite数据库上运行测试时收到各种错误。错误包括SQLITE_IOERR_DELETE_NOENT (5898)
和SQLITE_READONLY_DBMOVED (1032)
。即使在我删除文件/tmp/a
后,这些错误仍然存在。奇怪的是,如果我指定数据库位于/tmp/b
,那么一切都按预期运行。此外,值得注意的是,/tmp/a
处的错误发生在数据库初始化之后,意味着数据库已经用各种表初始化;这意味着写操作在一定程度上是有效的。2而且,两个文件的文件权限看起来是相同的:
$ ls -ahlv /tmp/a
-rw-r--r-- 1 rik users 24K Jan 15 18:00 /tmp/a
$ ls -ahlv /tmp/b
-rw-r--r-- 1 rik users 24K Jan 15 18:00 /tmp/b
也许这是SSD缓存的一些问题?我会继续关注它,并更新这篇文章,如果有新的事情发生。
1条答案
按热度按时间xmd2e60i1#
您的临时文件名可能不够随机,无法防止另一个无管理进程与同一文件交互。您可能希望使用或更多随机文件名,以避免同一文件上的冲突。或者,如果文件确实是临时文件,您可能希望使用
:memory:
文件名,这意味着不在磁盘上写入任何内容,并将整个数据库保存在内存中。