我从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