Emacsのsql-modeで簡単にSQL文を実行する

環境は,

"emacs sqlite"などでぐぐってみても情報はそんなに多くない気がしたのでまとめてみる.

まずはsqlite3の準備

Ubuntu 9.10には最初からsqlite3が入っている.
ターミナルでsqlite3というコマンドで普通に使える.
しかし,Emacsで使うにはちょっと工夫が必要.
Emacsだと

M-x sql-sqlite

sql-modeに入れるけど,dbファイルとかをちゃんと指定しても

Searching for program: no such file or directory, sqlite

のように出るはず.これはsqliteというコマンドを探しているため.
実際はsqlite3というコマンドなので,当然うまくいかない.
これはシンボリックリンクを張ってやればよい.
まずwhichでsqlite3の場所を探す.

% which sqlite3
/usr/bin/sqlite3

Ubuntu 9.10の場合/usr/bin/sqlite3にあるようだ.
場所がわかったらシンボリックリンクを張る.

% sudo ln -s /usr/bin/sqlite3 /usr/bin/sqlite

また,ルート権限がない場合などは上記の方法は使えない.
パスの通った場所ならどこにリンクを張ってもよいので,~/binにパスを通しているとすると

% ln -s /usr/bin/sqlite3 ~/bin/sqlite

でも同じ.

(2010-10-07) 追記

Ubuntu 10.04 には標準で splite3 が入っていなかった.
その場合は以下のコマンドでインストール.

% sudo aptitude install sqlite3

splite3 は上記と同様に /usr/bin 以下にインストールされるので,上記と同様の手順でシンボリックリンクを張る.

% which sqlite3
/usr/bin/sqlite3
% sudo ln -s /usr/bin/sqlite3 /usr/bin/sqlite

sql-modeを使う

Emacsを,dbファイルがあるディレクトで起動する.
そして以下のコマンドを入力.

M-x sql-sqlite

パスワードなどを設定していない場合は,Databaseだけ入力すれば良い.

SQLite version 3.6.16
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>

このような新しいバッファが開かれると起動成功.
あとはターミナルで起動したときと同じように使える.


便利な使い方

せっかくEmacs上で使っているのに,普通に使ったのではまったく意味がない.

キーバインド 関数 説明
C-c C-b sql-send-buffer バッファの内容を SQLi バッファに送る
C-c C-r sql-send-region リージョンの内容を SQLi バッファに送る
C-c C-c sql-send-paragraph 現在の行を SQLi バッファに送る

SQLi バッファとは,M-x sql-sqliteで開いたバッファのこと.
最低限この3つだけでも覚えよう.