複数データベースの利用

「単一ファイルが一単位のDB」という性質は SQLite の特徴でもある。DB ファイルが大きくなっても更新操作は十分な速度で行なえるよう設計されている。 しかしながら、書き込み用と読み取り専用のDBを分けたいだとかの理由で 用途ごとに複数のDBファイルに分けたい場合もある。

ATTACH DATABASE

SQLite では ATTACH DATABASE 文で別のデータベースファイルを、起動中の SQLite DB 接続に追加する。

ATTACH [ DATABASE ] DB(ファイル) AS スキーマ名;

DB(ファイル) にはデータベースファイル名を指定できる。

スキーマ名 は他のDBと区別できる識別子を与える。 sqlite3 コマンドを最初に起動したときのデータベースのスキーマ名は main である。接続中のデータベース一覧はドットコマンド .databases で得られる。

sqlite3 test.sq3
.data
seq  name             file
---  --------------- --------------------------------------
0    main             /home/yuuji/test.sq3

ATTACH 文で追加接続する。

ATTACH DATABASE "/tmp/foo.sq3" AS foo;
.data
seq  name             file
---  --------------- --------------------------------------
0    main             /home/yuuji/test.sq3
2    foo              /tmp/foo.sq3

各データベース中のテーブルには スキーマ名.テーブル名 でアクセスする。テーブル名が全スキーマ中で唯一に決まるものであれば、 スキーマ名は省略できる。

取り外しは DETACH DATABASE で行なう。

DETACH [ DATABASE ] スキーマ名;
DETACH DATABASE foo;
.data
seq  name             file
---  --------------- --------------------------------------
0    main             /home/yuuji/test.sq3
DETACH main;
Error: cannot detach database main

main は DETACH できない。

yuuji@koeki-u.ac.jp