在使用Perl DBD::SQLite时,在单个事务中进行第二个查询时,SQLite是否会出现“数据库已锁定”错误的已知问题?场景:Linux,Perl DBI,AutoCommit => 0,一个包含两个代码块的子例程(使用这些代码块来本地化变量名)。在第一个代码块中,通过prepare()创建了一个查询句柄用于选择语句,它被执行()并关闭该块。在第二个代码块中,通过prepare()为更新语句创建了另一个查询句柄,并且经常(30%的时间)SQLite/DBI在此阶段给出数据库锁定错误。我认为错误发生在prepare()而不是execute()期间。
我的解决方法是在第一个查询后提交。(对第一个查询调用finish没有帮助)。出于优雅和性能等多种原因,我不想提交。原始代码在Postgres作为数据库上运行多年没有问题。我尝试过sqlite_use_immediate_transaction但没有效果。
在所有其他情况下,我发现SQLite表现非常好,因此我认为这是DBD驱动程序中的疏忽,而不是SQLite的问题。可悲的是,我的当前代码是一堆脚本和模块,因此我没有一个简短的、单文件的测试用例。
我的解决方法是在第一个查询后提交。(对第一个查询调用finish没有帮助)。出于优雅和性能等多种原因,我不想提交。原始代码在Postgres作为数据库上运行多年没有问题。我尝试过sqlite_use_immediate_transaction但没有效果。
在所有其他情况下,我发现SQLite表现非常好,因此我认为这是DBD驱动程序中的疏忽,而不是SQLite的问题。可悲的是,我的当前代码是一堆脚本和模块,因此我没有一个简短的、单文件的测试用例。