问题 是否可以在只读模式下打开一个锁定的sqlite数据库?


我想用python-sqlite3打开铬站点数据(在〜/ .config / chromium / Default中),但是当chrome运行时它会被锁定,这是可以理解的,因为可以进行交易。有没有办法以只读模式打开它,确保在使用它时我不能破坏数据库的完整性?


3215
2017-10-22 06:05


起源



答案:


我认为这取决于交易设置的锁定。

http://www.sqlite.org/lockingv3.html#shared_lock http://www.sqlite.org/lang_transaction.html

SQLite独占事务锁定读写,其中立即和延迟事务仍然允许读者。

所以它真的取决于Chromium使用的交易。


8
2017-10-22 06:24



+1:这是怎么做的 中 SQLite的。 - Donal Fellows


答案:


我认为这取决于交易设置的锁定。

http://www.sqlite.org/lockingv3.html#shared_lock http://www.sqlite.org/lang_transaction.html

SQLite独占事务锁定读写,其中立即和延迟事务仍然允许读者。

所以它真的取决于Chromium使用的交易。


8
2017-10-22 06:24



+1:这是怎么做的 中 SQLite的。 - Donal Fellows


Chromium长时间持有数据库锁吗?呸!这根本不是一个好主意。还没 你的 故障…

您可以尝试仅复制数据库文件(例如,使用系统实用程序) cp并使用该快照进行阅读; SQLite将其所有提交状态保存在每个数据库的单个文件中。是的,有可能看到部分事务,但你肯定不会在Unix上遇到锁定问题,因为SQLite绝对不会使用强制锁定。 (由于那里的锁定方案不同,这可能不适用于Windows。)


3
2017-10-22 06:36



这不一定是铬的错。我发现,窥探一下 这个 有用的消息,指出pysqlite库没有提供所有sqlite功能的接口,因为它符合DB-API。所以可能是当我用pysqlite打开数据库时,我没有在读写模式下这样做。他指出APSW在启动连接时使用SQLITE_OPEN_READONLY标志。我现在就检查一下。 - ladaghini