My fellow database gurus, I love SQLite, but an issue with concurrency is driving me absolutely batshit.
I have a program that runs every few minutes, updating an SQLite database from feeds. There can be some overlap in the runtime: a new instance may start while a previous instance is still running. In such a case, I nearly always get the dreaded "database is locked" error -- SQLITE_BUSY. Here's what I've done to try to avoid this error: * sqlite_use_immediate_transaction => 1 * PRAGMA journal_mode = WAL * $dbh->sqlite_busy_timeout(60_000); None of these has made a difference. Now, I recognize that there can be some lock contention, but I certainly would think that one process would try to wait for a bit for a lock to release before it gave up the ghost. But when I run this stuff, it fails *very* quickly -- the busy timeout obviously is not being used. So my question is, what other tactics can be used to improve the lock concurrency situation with SQLite? I understand that there have to be some pretty strong locks, but I'm perfectly happy for one process to wait for a lock to be freed. Why doesn't it just wait? It fails instantly! Or am I going to have to use PostgreSQL? Frustratedly, David