我正在运行一个看起来像这样的查询:
ATTACH 'db2' as db;
BEGIN TRANSACTION;
...
END TRANSACTION;
我必须这样做,因为在事务中附加是错误的。
如果在发出上述查询时另一个连接已经在运行任何类型的查询,则会出现此问题。然后整个查询似乎失败,返回 SQLITE_BUSY。
为了解决这个问题,我睡了一会儿,然后重试交易。但是,现在我收到错误“无法在事务中附加数据库”。为什么会这样?尽管返回 SQLITE_BUSY,原始附加是否成功?如果是这样,那为什么我没有得到“数据库 db2 已在使用中”呢?还是尽管返回了 SQLITE_BUSY,但之前的事务仍然打开?这对我来说没有意义,查询失败繁忙,所以交易不应该被打开。但还能是什么呢?
一般来说,执行查询的程序不知道查询是什么,它只是一个包装器。因此,我无法将查询分成两部分,一部分用于附加数据库,另一部分用于执行其余的查询。但我不确定这是否是问题所在。