SQLite | SQLiteコマンド | データベースのダンプ(.dump)
データベースのスキーマとデータをSQL文として出力することをダンプと呼びます。ここでは.dumpの使い方を説明します。
ダンプからデータベースを再構築するには.readコマンドを使用します。
.dumpの使い方
.dumpでSQLiteデータベースを出力します。構文は次のとおりです。
.dump? TABLE? ...
引数なしならデータベース全体、テーブル名を指定するとそのテーブルだけを出力します。
サンプルのテーブルとデータを作成します。
create table user (name text, old integer, address text);
insert into user values ('devkuma', 28, 'Seoul');
insert into user values ('kimkc', 22, 'Busan');
insert into user values ('araikuma', 32, 'Seoul');
insert into user values ('happykuma', 23, 'Seoul');
insert into user values ('mykuma', 23, 'Daejeon');
create index nameindex on user (name);
create table color (id integer, name text);
insert into color values (1, 'Red');
insert into color values (2, 'Blue');
insert into color values (3, 'White');
2つのテーブルと1つのインデックスを持つデータベースで.dumpを実行します。
.dump
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE user (name text, old integer, address text);
INSERT INTO user VALUES('devkuma',28,'Seoul');
INSERT INTO user VALUES('kimkc',22,'Busan');
INSERT INTO user VALUES('araikuma',32,'Seoul');
INSERT INTO user VALUES('happykuma',23,'Seoul');
INSERT INTO user VALUES('mykuma',23,'Daejeon');
CREATE TABLE color (id integer, name text);
INSERT INTO color VALUES(1,'Red');
INSERT INTO color VALUES(2,'Blue');
INSERT INTO color VALUES(3,'White');
CREATE INDEX nameindex on user (name);
COMMIT;
sqlite>
出力にはスキーマ用のCREATE TABLEとデータ用のINSERTが含まれ、順に実行するとデータベースを再構築できます。
userを指定してそのテーブルだけをダンプします。
.dump user
sqlite> .dump user
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE user (name text, old integer, address text);
INSERT INTO user VALUES('devkuma',28,'Seoul');
INSERT INTO user VALUES('kimkc',22,'Busan');
INSERT INTO user VALUES('araikuma',32,'Seoul');
INSERT INTO user VALUES('happykuma',23,'Seoul');
INSERT INTO user VALUES('mykuma',23,'Daejeon');
CREATE INDEX nameindex on user (name);
COMMIT;
sqlite>
ダンプをファイルへ出力する
.dumpの前に.outputを使うと、出力をファイルへリダイレクトできます。
現在のディレクトリのdump.txtへ出力します。この設定はクエリ結果にも適用されます。
.output ./dump.txt
sqlite> .output ./dump.txt
sqlite>
出力先がdump.txtになりました。.dumpを実行します。
.dump
sqlite> .dump
sqlite>
ダンプはファイルへ書かれるため画面には表示されません。
現在のディレクトリに新しいdump.txtがあります。
$ ls -al
total 5056
drwxr-xr-x@ 8 kimkc staff 272 11 4 01:24 .
drwxr-xr-x 9 kimkc staff 306 10 17 23:49 ..
drwxr-xr-x 24 kimkc staff 816 11 4 01:24 bak
-rw-r--r-- 1 kimkc staff 16384 11 4 01:14 dump.sqlite3
-rw-r--r-- 1 kimkc staff 538 11 4 01:21 dump.txt
-rwxr-xr-x@ 1 kimkc staff 691768 10 11 18:31 sqldiff
-rwxr-xr-x@ 1 kimkc staff 1152260 10 11 18:32 sqlite3
-rwxr-xr-x@ 1 kimkc staff 719796 10 11 18:31 sqlite3_analyzer
$
テキストファイルを開くとダンプ内容を確認できます。
$ cat dump.txt
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE user (name text, old integer, address text);
INSERT INTO user VALUES('devkuma',28,'Seoul');
INSERT INTO user VALUES('kimkc',22,'Busan');
INSERT INTO user VALUES('araikuma',32,'Seoul');
INSERT INTO user VALUES('happykuma',23,'Seoul');
INSERT INTO user VALUES('mykuma',23,'Daejeon');
CREATE TABLE color (id integer, name text);
INSERT INTO color VALUES(1,'Red');
INSERT INTO color VALUES(2,'Blue');
INSERT INTO color VALUES(3,'White');
CREATE INDEX nameindex on user (name);
COMMIT;
$
.output stdoutで画面出力へ戻します。
.output stdout
sqlite> .output stdout
sqlite>
出力先を戻すかCLIを終了するまで、ファイルがロックされる場合があります。