やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

SQLite3ドットコマンド(.save)

 DBファイルの別名コピー。.backupとの違い不明。

成果物

.help

.save FILE               Write in-memory database into FILE

 同名ファイルがあっても確認せず上書きする。

.save

sqlite3 :memory: ".save a.db"
sqlite3 :memory: ".save a.db"
sqlite3 :memory: \
"create table T(C text);" \
"insert into T values('AAA');" \
"select * from T;" \
".save a.db"
AAA
sqlite3 :memory: \
"create table T(C text);" \
"insert into T values('BBB');" \
"select * from T;" \
".save a.db"
BBB

 a.dbが上書きされた。

.backupと何が違うの?

自分自身には上書きできない

rm a.db
sqlite3 a.db \
"create table T(C text);" \
"insert into T values('AAA');" \
"select * from T;" \
".save a.db"
Error: database is locked

 以下、.backupも同様

rm a.db
sqlite3 a.db \
"create table T(C text);" \
"insert into T values('AAA');" \
"select * from T;" \
".backup a.db"
Error: database is locked

別ファイルへ

rm a.db
sqlite3 a.db \
"create table T(C text);" \
"insert into T values('AAA');" \
"select * from T;" \
".save b.db"
AAA

 これを2回連続で実行しても問題なし。つまりb.dbに同じ内容を上書きしたと思われる。

 以下、.backupでも同様。

rm a.db
sqlite3 a.db \
"create table T(C text);" \
"insert into T values('AAA');" \
"select * from T;" \
".backup b.db"
AAA

紛らわしいコマンド

コマンド 概要
.backup 違い不明
.clone ファイルが既存ならエラー
.load .saveの対義語ではない。.loadは拡張ライブラリ読込
.output 出力先の設定
dump SQL文で出力
recover SQL文で出力(DB破損していても)
once 次のSQL結果を1度だけ外部アプリかファイルへ出力

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux

前回まで