Известна ли проблема, связанная с тем, что SQLite выдает ошибку «база данных заблокирована» для второго запроса в одной транзакции при использовании Perl DBD :: SQLite? Сценарий: Linux, Perl DBI, AutoCommit => 0, подпрограмма с двумя блоками кода (использование блоков для локализации имен переменных). В первом блоке кода дескриптор запроса создается методом prepare () в операторе select, он выполняется () и блок закрывается. Второй блок кода, другой дескриптор запроса, создается подготовкой к оператору обновления, и часто (30% времени) SQLite / DBI выдает ошибку блокировки базы данных на этом этапе. Я думаю, что ошибка происходит во время prepare (), а не во время execute ().
Моя работа заключается в том, чтобы коммитить после первого запроса. (Вызов финиша по первому запросу не помог). Я предпочитаю не совершать по нескольким причинам, связанным с элегантностью и производительностью. Исходный код прекрасно работал в течение многих лет с Postgres в качестве базы данных. Я попытался sqlite_use_immediate_transaction без эффекта.
Во всех других ситуациях я обнаружил, что SQLite работает очень хорошо, поэтому я подозреваю, что это упущение в драйвере DBD, а не проблема с SQLite. К сожалению, мой текущий код представляет собой большую кучу скриптов и модулей, поэтому у меня нет короткого теста для одного файла.