どうしたらええんじゃ。調べてもすぐには出てこない。 DB自体が「単一ファイル」という性質を利用して総合的に対処せよということか。
sqlite3(1) にはread-onlyモードで開くコマンドラインオプションがない。 ソース見たけどない。 気にせずsqlite3コマンドでselectだけして終わるスクリプト作ればいいんだろうが、 絶対に書き込みしないことを保証したい気分もある。 Web上には「DBファイルのコピーを作ってそっちを開け」などの助言が見付かるが、 いちいちコピーを取るのもねえ。
てときは、書き込みできないディレクトリを作ってそこに元の SQLite3データベースファイルのリンクを張ればよい。
mkdir readonly ln SQLite3-DB-file readonly chmod a-w readonly
これならread-onlyで開きたいときにいちいちコピーを取らなくてよい。
上記コマンドライン版用の方法でもよいが、 DB接続メソッドに渡すオプション用のハッシュに :readonly 属性を渡せばよい。
require 'sqlite3' db = SQLite3::Database.new("SQLite3-DB-file", {:readonly=>true})
安心。