以只读方式打开
我在文件系统上有一个 sqlite3 文件,该文件属于与运行读取过程不同的用户。我希望读取过程能够以只读模式读取文件,所以我传递了 SQLITE_OPEN_READONLY。我希望这能奏效。当然,这个想法是只读模式适用于我们不想写入的文件?
当我准备我的第一份陈述时,我得到
unable to open database file
同样,如果我运行sqlite3
命令行工具,我会得到相同的结果,除非我使用 sudo。这似乎向我证实了问题在于可写性而不是其他任何问题。
日志文件
这个问题的答案似乎表明,如果周围有日志文件,那么只读访问是不可能的。
为什么会有日志文件?因为另一个进程正在写入文件,所以我的用户进程正试图以只读方式打开它。为此,我使用了Write-Ahead Logging,它产生两个日志文件,-shm
和-wal
. 确实,如果我停止写入过程并删除日志文件,我的用户进程可以以只读模式打开它。
不兼容?
所以我有两种情况:
如果文件既属于写入进程又属于只读进程,则预写日志记录使进程 A 可以写入,而进程 B 可以只读
如果文件属于写进程但不属于只读进程,则阻止只读进程以只读方式打开。
我如何实现这两个?把它拼出来,我想要:
- 写入进程拥有数据库
- 只读进程不拥有数据库
- 只读进程无法写入数据库
- 在数据库上启用了预写日志记录
似乎是一组简单的要求,但我看不到明显的解决方案。
**编辑:**按照这个文档,看起来这是不可能的。你能建议任何替代方法来实现上述目标吗?