Skip to main content

sqlite

SQLiteはRDBMSのデータベースエンジン。サーバではなくライブラリで、とても小さく軽量。

ここでは コマンドラインインタフェース sqlite3 の利用について記載する。

データベースファイルを指定して起動

sqlite3 database.db
-column 左寄せのカラム形式で表示
-header 列の見出しを表示

コマンドラインでSQL実行

sqlite3 database.db 'SELECT count(*) FROM mytable;'

echo 'SELECT count(*) FROM mytable;' | sqlite3 database.db

cat << quit | sqlite3 database.db
SELECT count(*) FROM mytable;
quit

sqlite3 database.db < filename.sql

主なメタコマンド

データベースファイルの確認

.databases

存在する表の確認

.tables

表のDDLの確認

.schema

表のインデックス名の確認

.indices 表名

DDLとデータ内容をSQLでダンプ

.dump [表名]
表名を省略すると全てのテーブルが対象。

ファイルに記載されたSQLを実行

.read ファイル名

CSV形式で表示

.header on
.mode csv
.output ファイル名
SELECT * FROM ...;
.output stdout

CSVファイルの内容を表へインポート

.import database.csv mytable

データベース全体のダンプとリストア

sqlite3 database.db .dump | gzip -c > database.dump.gz
zcat database.dump.gz | sqlite3 database_test.db
(ダンプはSQLなので、sqlite以外の環境へもリストア可能)

バックアップとリストア

cat >> test1.sql << END
SELECT count(*) FROM test;
.backup tmp.backup
DROP TABLE test;
SELECT count(*) FROM test;
.restore tmp.backup
SELECT count(*) FROM test;
END

dump sqlite3 and import to postgresql

$ sqlite3 database_test.db << quit
> .output dump.sql
> .dump
> quit
$ sed -i.bak -e '/^PRAGMA/ s/^/-- /' dump.sql
$ sudo docker run --rm -e POSTGRES_PASSWORD=mypassword -p 5432:5432 -d postgres:alpine
    $ sudo docker exec -i xxxxx psql -U postgres << quit
> CREATE USER dbuser;
> CREATE DATABASE dbuser;
> ALTER ROLE dbuser WITH PASSWORD 'dbuserpassword';
> GRANT ALL PRIVILEGES ON DABABASE dbuser TO dbuser;
> ALTER DATABASE dbuser OWNER TO dbuser;
    > quit
$ cat dump.sql | sudo docker exec -i xxxx psql -U dbuser