gpt4 book ai didi

sqlite - 使用 -journal 文件在只读文件系统上打开 sqlite3 数据库

转载 作者:行者123 更新时间:2023-12-03 17:50:37 27 4
gpt4 key购买 nike

我有一个 sqlite3 DB,我需要在只读文件系统上读取(而不是写入)。还有一个与数据库关联的 -journal 文件,它会干扰打开数据库,因为 sqlite 代码想要做的第一件事就是删除该 -journal 文件,而它不能,因为文件系统是只读的。将 journal_mode 设置为 off 无济于事,因为这显然仅适用于新事务。有没有办法告诉 sqlite3 简单地忽略与数据库关联的 -journal 文件的所有提及?

最佳答案

抱歉不行。

问题是日志文件的存在表明事务处于未完成状态,需要通过将日志文件的内容传输回数据库文件来回滚。

这需要对文件系统的写访问权限,并且 SQLite 将不允许您在不执行此回滚的情况下打开文件。

您可以在此处阅读更多相关信息:Read-Only Databases :

No SQLite database (regardless of whether or not it is WAL mode) is readable if it is located on read-only media and it requires recovery. So, for example, if an application crashes and leaves an SQLite database with a hot journal, that database cannot be opened unless the opening process has write privilege on the database file, the directory containing the database file, and the hot journal. This is because the incomplete transaction left over from the crash must be rolled back prior to reading the database and that rollback cannot occur without write permission on all files and the directory containing them.



如果您不关心丢弃日志文件可能导致的损坏,您可以制作数据库文件的副本,并将日志留在后面。但是,如果您有能力这样做,我实际上也会将日志文件复制到可写文件系统中,然后正常打开该数据库,这将正确回滚事务。

只读文件系统上的副本在其当前状态下不可用。

关于sqlite - 使用 -journal 文件在只读文件系统上打开 sqlite3 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7957778/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com