2011-10-22 40 views
10

私はpython-sqlite3でクロムサイトのデータ(〜/ .config/chromium/Default)を開きたいと思いますが、クロムが実行されている間はロックされてしまいます。クロムがそれを使用している間、私はdbの完全性を壊すことができないように、読み取り専用モードで開く方法はありますか?ロックされたsqliteデータベースを読み取り専用モードで開くことはできますか?

答えて

7

私はトランザクションによって設定されたロックに依存すると信じています。

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

SQLiteの排他的取引は、両方の即時および遅延トランザクションはまだ読者を許可する場所の読み取りおよび書き込みをロックします。

これは実際にChromiumが使用するトランザクションに依存します。

+0

+1:これは_within_ SQLiteのやり方です。 –

3

Chromiumは長時間データベースのロックを保持していますか?ヤク!それは本当に良い考えではありません。それでも、ないあなた障害...

あなただけの(システム・ユーティリティcpで、例えば)データベースファイルをコピーし、目的を読み取るため、そのスナップショットを使用して試みることができます。 SQLiteはすべてのコミットされた状態をデータベースごとに1つのファイルに保持します。はい、部分的なトランザクションを見る機会がありますが、SQLiteは必須のロックを使用していないため、Unixではロックの問題は発生しません。 (これは、Windows上で異なるロッキングスキームがあるため、うまく動作しない可能性があります)。

+2

必ずしもクロムの欠陥ではありません。詮索すると、pysqliteライブラリはすべての人にインターフェイスを提供していないことを指摘した[this](http://mail.python.org/pipermail/python-list/2009-July/1211171.html)の有用なメッセージが見つかりましたsqliteの機能はDB-APIに準拠しているためです。ですから、私がpysqliteでdbをオープンすると、私は読み書きモードで言わずにそうしています。彼は、接続を開始するときにSQLITE_OPEN_READONLYフラグを使用するようAPSWに指示しました。私は今それをチェックします。 – ladaghini

関連する問題