我使用命令行sqlite3来进行操作,从bash启动。
我生成多个进程,所有进程都试图向同一sqlite数据库文件中插入数据。
经常出现“数据库已锁定”的情况。
根据我对文档(http://www.sqlite.org/cvstrac/wiki?p=DatabaseIsLocked)的理解,这种情况不应该发生:“SQLITE_LOCKED表示争用源来自相同的数据库连接,并收到SQLITE_LOCKED错误”。
由于sqlite3命令行是单线程的,因此我期望在此情况下出现SQLITE_BUSY,但不会出现SQLITE_LOCKED。
代码:
我生成多个进程,所有进程都试图向同一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