Возможно ли открыть заблокированную базу данных sqlite в режиме только для чтения?

Я хотел бы открыть данные сайта chromium (в ~/.config/chromium/Default) с помощью python-sqlite3, но он блокируется всякий раз, когда выполняется хром, что понятно, поскольку транзакции могут быть сделаны. Есть ли способ открыть его в режиме только для чтения, гарантируя, что я не могу испортить целостность db, пока хром использует его?

Ответ 1

Я считаю, что это зависит от блокировки, установленной транзакцией.

http://www.sqlite.org/lockingv3.html#shared_lock http://www.sqlite.org/lang_transaction.html

Исключительные транзакции SQLite блокируют чтение и запись, где немедленные и отложенные транзакции все еще позволят читателям.

Таким образом, это действительно зависит от транзакций, используемых Chromium.

Ответ 2

Хром удерживает блокировку базы данных в течение длительных периодов времени? Тьфу! Это действительно не очень хорошая идея. Тем не менее, не ваша вина...

Вы можете попробовать просто скопировать файл базы данных (например, с помощью системной утилиты cp) и использовать этот снимок для чтения; SQLite сохраняет все зафиксированное состояние в одном файле на каждую базу данных. Да, есть вероятность увидеть частичную транзакцию, но у вас наверняка не будет проблем с блокировкой в ​​Unix, поскольку SQLite определенно не использует обязательные блокировки. (Это может не работать в Windows из-за различной схемы блокировки.)