SQLite - 如何创建真正的只读数据库

3
我想打开并以只读方式阅读SQLite .db文件。在此期间,我保证没有其他人会触及它(也许仅限于只读)。从SQLite3那里,我需要的是它永远不会向磁盘写入任何东西(具体包括这些这里所描述的内容),并且不会对该文件使用任何文件系统锁定。这样咨询太多了吗?

我们发现了这个“Read-Uncommitted Isolation Mode”,请参考http://www.sqlite.org/sharedcache.html,它应该可以解决这个问题;然而,它并没有。SQLite仍然尝试使用锁定API。有什么想法吗? - Pavel Radzivilovsky
3个回答

3
如果您正在运行某个Unix系统,您可以使用unix-noneVFS来禁用所有锁定。
在Windows中,SQLite始终使用锁。 如果您真的想避免锁定,可以编写自己的VFS,或者使用xSetSystemCall覆盖锁定系统调用。
如果SQLite需要临时文件,则无法阻止它创建文件。 但是,您可以将其配置为在内存中而不是在磁盘上创建文件

1
注意:关于您自己的VMS,您可以使用sqlite_vfs_* API获取现有的VMS,然后仅使用自己的锁定函数创建一个新的vtable,该函数不执行任何操作。因此,这应该非常简单。 - Artyom

0

VFS没有可以注入的Lock方法。因此,没有直接的方法来注入虚拟的LockFile和LockFileEx方法。

这些方法被引用在sqlite3_io_methods(winIoMethod)中,似乎很难在运行时修改而不改变SQLite源代码。

所以,如果我理解正确,VFS不是正确的方向吗?还是说它是?


-1

也许可以使用只读用户?我不知道在SQL Lite中是否存在这样的角色。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接