Я хотел бы открыть данные сайта chromium (в ~/.config/chromium/Default) с помощью python-sqlite3, но он блокируется всякий раз, когда выполняется хром, что понятно, поскольку транзакции могут быть сделаны. Есть ли способ открыть его в режиме только для чтения, гарантируя, что я не могу испортить целостность db, пока хром использует его?
Возможно ли открыть заблокированную базу данных sqlite в режиме только для чтения?
Ответ 1
Я считаю, что это зависит от блокировки, установленной транзакцией.
http://www.sqlite.org/lockingv3.html#shared_lock http://www.sqlite.org/lang_transaction.html
Исключительные транзакции SQLite блокируют чтение и запись, где немедленные и отложенные транзакции все еще позволят читателям.
Таким образом, это действительно зависит от транзакций, используемых Chromium.
Ответ 2
Хром удерживает блокировку базы данных в течение длительных периодов времени? Тьфу! Это действительно не очень хорошая идея. Тем не менее, не ваша вина...
Вы можете попробовать просто скопировать файл базы данных (например, с помощью системной утилиты cp
) и использовать этот снимок для чтения; SQLite сохраняет все зафиксированное состояние в одном файле на каждую базу данных. Да, есть вероятность увидеть частичную транзакцию, но у вас наверняка не будет проблем с блокировкой в Unix, поскольку SQLite определенно не использует обязательные блокировки. (Это может не работать в Windows из-за различной схемы блокировки.)