Почему SQLite выдает сообщение «база данных заблокирована» для второго запроса в транзакция при использовании Perl DBD :: SQLite?

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

Моя работа - зафиксировать после первого запроса. (Вызов финиша по первому запросу не помог). Я предпочитаю не брать на себя обязательства по нескольким причинам, связанным с элегантностью и производительностью. Исходный код много лет отлично работал с Postgres в качестве базы данных. Я попробовал sqlite_use_immediate_transaction, но безрезультатно.

Во всех других ситуациях я обнаружил, что SQLite работает очень хорошо, поэтому я подозреваю, что это недосмотр в драйвере DBD, а не проблема с SQLite. К сожалению, мой текущий код - это большая куча скриптов и модулей, поэтому я не у меня есть короткий тестовый пример из одного файла.

6
задан brian d foy 15 October 2010 в 17:50
поделиться