SQLite3で read-only open

どうしたらええんじゃ。調べてもすぐには出てこない。 DB自体が「単一ファイル」という性質を利用して総合的に対処せよということか。

コマンドライン

sqlite3(1) にはread-onlyモードで開くコマンドラインオプションがない。 ソース見たけどない。 気にせずsqlite3コマンドでselectだけして終わるスクリプト作ればいいんだろうが、 絶対に書き込みしないことを保証したい気分もある。 Web上には「DBファイルのコピーを作ってそっちを開け」などの助言が見付かるが、 いちいちコピーを取るのもねえ。

てときは、書き込みできないディレクトリを作ってそこに元の SQLite3データベースファイルのリンクを張ればよい。

mkdir readonly
ln SQLite3-DB-file readonly
chmod a-w readonly

これならread-onlyで開きたいときにいちいちコピーを取らなくてよい。

sqlite3-ruby

上記コマンドライン版用の方法でもよいが、 DB接続メソッドに渡すオプション用のハッシュに :readonly 属性を渡せばよい。

require 'sqlite3'
db = SQLite3::Database.new("SQLite3-DB-file", {:readonly=>true})

安心。