【发布时间】:2015-07-16 21:01:11
【问题描述】:
我使用来自 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 lock_mode=EXCLUSIVE;见鬼,但它没有帮助。
sqlite3 -version
3.8.9 2015-04-08 12:16:33 8a8ffc862e96f57aa698f93de10dee28e69f6e09
【问题讨论】: