Esiste un problema noto con SQLite che genera un errore "database bloccato" per una seconda query in una singola transazione quando si utilizza Perl DBD :: SQLite? Scenario: Linux, Perl DBI, AutoCommit => 0, una subroutine con due blocchi di codice (utilizzando i blocchi per localizzare i nomi delle variabili). Nel primo blocco di codice viene creato un handle di query da prepare() su un'istruzione select, viene eseguito() e il blocco viene chiuso. Il secondo blocco di codice viene creato da un altro handle di query preparando un'istruzione di aggiornamento e frequentemente (il 30% delle volte) SQLite/DBI fornisce un errore bloccato del database in questa fase. Penso che l'errore si verifichi durante prepare() e non durante l'esecuzione().Perché SQLite fornisce un "database bloccato" per una seconda query in una transazione quando si utilizza DBD :: SQLite di Perl?
Il mio lavoro è di eseguire il commit dopo la prima query. (Chiamare finire sulla prima query non ha aiutato). Preferisco non impegnarmi per diversi motivi relativi all'eleganza e alle prestazioni. Il codice originale ha funzionato bene per molti anni con Postgres come database. Ho provato sqlite_use_immediate_transaction senza alcun effetto.
In tutte le altre situazioni, ho trovato che SQLite si comporta molto bene, quindi sospetto che si tratti di una svista nel driver DBD, piuttosto che un problema con SQLite. Purtroppo, il mio codice attuale è una grande pila di script e moduli, quindi non ho un caso di test di un singolo file.
Puoi mostrarci il tuo piccolo test case che dimostra il problema? –