SQLite3ドットコマンド(.clone)
DBを丸ごと別名コピーする。(元がインメモリでもファイルでも可)
成果物
.help
.clone NEWDB Clone data into NEWDB from the existing database
.clone
in-memory→ファイル
インメモリをファイルへ.clone
する。
sqlite3 :memory: \ "create table T(C text);" \ "insert into T values('AAA');" \ ".clone clone.db"
T... done
sqlite3 clone.db \ "select sql from sqlite_master;" \ ".headers on" \ "select * from T;"
CREATE TABLE T(C text) C AAA
ファイル→in-memory
sqlite3 :memory: \ ".open clone.db" \ "select sql from sqlite_master;" \ ".headers on" \ "select * from T;"
CREATE TABLE T(C text) C AAA
ファイル→ファイル
sqlite3 clone.db ".clone clone_0.db"
T... done
バイナリ比較する。
cmp clone.db clone_0.db
何も表示されなかったので差分なし。完全に同一ファイル。
空DBでやるとエラー
sqlite3 :memory: ".clone A.db"
Error: (7) out of memory on [SELECT name, sql FROM sqlite_master WHERE type='table'] Error: (7) out of memory on [SELECT name, sql FROM sqlite_master WHERE type!='table']
ファイルは出力されるが、テーブルはない。元からないので当然。
sqlite3 A.db ".tables"
対話モードでも同じ。
sqlite3
.clone A.db
Error: (7) out of memory on [SELECT name, sql FROM sqlite_master WHERE type='table'] Error: (7) out of memory on [SELECT name, sql FROM sqlite_master WHERE type!='table']
.tables
.backup
との違い
Cmd | 用途 |
---|---|
.clone |
既存ならエラー |
.backup |
既存でも上書き |
.clone
は出力先ファイルが既存だとエラーになる。
sqlite3 :memory: \ "create table T(C text);" \ "insert into T values('AAA');" \ ".clone clone.db" sqlite3 :memory: \ "create table T(C text);" \ "insert into T values('AAA');" \ ".clone clone.db"
File "clone.db" already exists.
.backup
は出力先ファイルが既存でも上書きする。
sqlite3 :memory: \ "create table T(C text);" \ "insert into T values('A');" \ ".backup ./some.backup" sqlite3 :memory: \ "create table T(C text);" \ "insert into T values('B');" \ ".backup ./some.backup"
sqlite3 :memory: \ ".restore ./some.backup" \ "select * from T;"
B
他の方法
.clone
は単にファイルコピーするだけだというなら、シェルコマンドを使う方法もある。
cp
cp -au clone.db clone_cp.db
-a
: 属性もできるかぎりコピー-u
: コピー元がコピー先より新しいか新規ファイルのときのみコピー
cmp clone.db clone_cp.db
.clone
は更新日時などの属性まではコピーしていなかった。そこまでコピーしたいならcp
シェルコマンドを使うべき。
または-i
を使う。
cp -ai clone.db clone_cp.db
cp: 'clone_cp.db' を上書きしますか?
-i
: ファイルが既存のとき上書き確認する(y
/n
)
または-n
。
cp -an clone.db clone_cp.db
-n
: ファイルが既存なら上書きしない
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
bash 4.4.12(1)-release
- MeCab 0.996ユーザ辞書
$ uname -a Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux
前回まで
- SQLite3学習をはじめよう
- SQLite3学習 SQLiteについて
- SQLite3学習 SQLiteの適切な用途
- SQLite3学習 SQLiteの特徴
- SQLite3学習 SQLiteのクセ
- SQLite3学習 データ型とアフィニティ
- SQLite3学習 演算子の一覧
- SQLite3学習 よくある質問
- SQLite3学習 SQLiteダウンロード&コンパイル
- SQLite3学習 Tclで操作する
- SQLite3学習 ビルドオプション動作確認(SQLITE_ALLOW_URI_AUTHORITY)
- SQLite3学習 面白そうなコンパイルオプション
- SQLite3学習 SQLiteの拡張について
- SQLite3学習 JSON拡張
- SQLite3学習 JSON拡張(json_extract)
- SQLite3学習 JSON拡張(json_each)
- SQLite3学習 JSON拡張(json_tree オブジェクト→行)
- SQLite3学習 JSON拡張(json_tree オブジェクトツリー→行)
- SQLite3学習 JSON拡張(json_tree オブジェクト配列→行)
- SQLite3学習 JSON拡張(json_group_array 行→配列)
- SQLite3学習 JSON拡張(json_group_object 行→オブジェクト)
- SQLite3学習 JSON拡張(json_array_length)
- SQLite3学習 JSON拡張(json_type)
- SQLite3学習 JSON拡張(json_valid)
- SQLite3学習 JSON拡張(json_quote)
- SQLite3学習 JSON拡張(json_array)
- SQLite3学習 JSON拡張(json_object)
- SQLite3学習 JSON拡張(json_patch)
- SQLite3学習 JSON拡張(json_insert)
- SQLite3学習 JSON拡張(json_replace)
- SQLite3学習 JSON拡張(json_set)
- SQLite3学習 JSON拡張(json_remove)
- SQLite3学習 全文検索(FTS5)
- SQLite3学習 全文検索FTSを日本語で使う方法を調べてみた
- 形態素解析MeCabをインストールする
- SQLite3学習 全文検索FTS5のMeCab用トークナイザを実装する
- SQLite3学習 FTS5+MeCabでクエリ構文
- SQLite3学習 FTS5のテーブル作成と初期化
- SQLite3学習 FTS5の補助関数
- SQLite3学習 FTS5のfts5vocab仮想テーブル
- SQLite3学習 再帰クエリ(WITH RECURSIVE)
- SQLite3学習 R-Treeモジュール
- SQLite3学習 ファイル入出力(SQL集計)
- SQLite3学習 拡張関数(generate_series)
- SQLite3謎 主キーの型をintにするとinsertで値を省略したらNULLになってしまう
- SQLite3学習 入出力関数(fsdir, readfile, writefile, edit)
- SQLite3ビルド コンパイルオプションを付与する方法(CFLAGS等))
- SQLite3 コンパイルオプション確認方法(pragma compile_options)
- SQLite3ビルド ICUを有効にする(SQLITE_ENABLE_ICU)
- SQLite3拡張 ICUを動的ロードする
- SQLite3拡張 ICUでcollateする
- SQLite3拡張 ICUで全文検索する(FTS4)
- SQLite3拡張 SQL関数一覧(pragma function_list)
- SQLite3拡張 仮想テーブルモジュール一覧(pragma module_list)
- SQLite3拡張 プラグマ一覧(pragma pragma_list)
- SQLite3謎 values()構文
- SQLite3学習 インタフェース概要
- SQLite3学習 CLI起動引数(-A)Archive
- SQLite3ビルド SQLITE_HAVE_ZLIBコンパイルオプション付与するも確認できず
- SQLite3学習 CLI(-readonly)
- MeCabユーザ辞書の作り方(Wikipediaの題名を名詞とした)
- SQLite3学習 CLI(-zip)
- SQLite3ドットコマンド(.archive)
- SQLite3ドットコマンド(.auth)断念
- SQLite3ドットコマンド(.backup .restore)
- SQLite3ドットコマンド(.read)
- SQLite3ドットコマンド(.dump)
- SQLite3ドットコマンド(.bail)謎
- SQLite3ドットコマンド(.binary)
- SQLite3ドットコマンド(.cd)
- SQLite3ドットコマンド(.changes)
- SQLite3ドットコマンド(.testcase .check)