sqlite 删除文件后仍出现磁盘I/O错误

flseospp  于 2023-01-17  发布在  SQLite
关注(0)|答案(1)|浏览(290)

当我指定数据库位于/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缓存的一些问题?我会继续关注它,并更新这篇文章,如果有新的事情发生。

xmd2e60i

xmd2e60i1#

您的临时文件名可能不够随机,无法防止另一个无管理进程与同一文件交互。您可能希望使用或更多随机文件名,以避免同一文件上的冲突。或者,如果文件确实是临时文件,您可能希望使用:memory:文件名,这意味着不在磁盘上写入任何内容,并将整个数据库保存在内存中。

相关问题