使用sqlite3命令行时,sqlite错误数据库被锁定

前端之家收集整理的这篇文章主要介绍了使用sqlite3命令行时,sqlite错误数据库被锁定前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我从bash使用sqlite3命令行.

我产生了多个进程,都试图插入到同一个sqlite数据库文件中.

我经常得到“数据库被锁定”.

根据我对文档的阅读(http://www.sqlite.org/cvstrac/wiki?p=DatabaseIsLocked),这应该永远不会发生:“sqlITE_LOCKED意味着争用的来源是内部的,来自接收sqlITE_LOCKED错误的同一数据库连接”.

sqlite3命令行是单线程的,所以在这种情况下我会期望sqlITE_BUSY,但不是sqlITE_LOCKED.

码:

doit() {
   sqlite3 /tmp/db "insert into foo(a,b,c) values(1,2,3);
}

doit &; doit &; doit &

我尝试添加PRAGMA busy_timeout = 2000;和PRAGMA locking_mode = EXCLUSIVE;对于它,但它没有帮助.

sqlite3 -version
3.8.9 2015-04-08 12:16:33 8a8ffc862e96f57aa698f93de10dee28e69f6e09

解决方法

sqlITE_BUSY的错误消息是“数据库被锁定”; sqlITE_LOCKED将是“数据库表被锁定”.

以下适用于我(没有busy_timeout会导致错误):

doit() {
   sqlite3 /tmp/db "pragma busy_timeout=20000; insert into foo(a,3);"
}

猜你在找的Sqlite相关文章