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