当其他进程从中读取SQLite数据集时写入

时间:2014-06-11 14:24:30

标签: concurrency sqlite

阅读SQLite文档here,当进程想要写入SQLite数据库时,它会获得一个保留锁。然后,一旦进程准备好写入磁盘,它就会获得挂起锁,在此期间没有新进程可以获得共享锁,但允许现有共享锁完成其业务。一旦剩余的共享锁清除,该进程就可以写入。

然而......当我尝试编写数据库而其他进程正在从该数据库读取时,我只是立即得到“错误:数据集被锁定”。

sqlite> insert into meta_models (model) values ("hello_world");
Error: database is locked

为什么SQLite不执行上面列出的等待共享锁清除的步骤?

1 个答案:

答案 0 :(得分:2)

SQLite会执行这些步骤,但在等待剩余的共享锁清除时超时。

您可以使用PRAGMA busy_timeout调整此超时。