概要
SQLiteアーカイブ内のファイルを更新するには「-u」オプションを使用する
実行環境
- Windows 10 64bit
- SQLite3 (3.39.2) Command-Line Shell
コマンドプロンプトやBashでアーカイブ内のファイルを更新する
sqlite> -- # 1.
sqlite> select * from sqlar;
┌─────────────┬───────┬────────────┬────┬──────────────────────┐
│ name │ mode │ mtime │ sz │ data │
├─────────────┼───────┼────────────┼────┼──────────────────────┤
│ sample1.txt │ 33206 │ 1667721196 │ 20 │ This is Sample Text. │
└─────────────┴───────┴────────────┴────┴──────────────────────┘
sqlite> .quit
C:\temp>rem # 2.
C:\temp>sqlite3 sample.sqlar -Au sample1.txt
C:\temp>sqlite3 sample.sqlar
SQLite version 3.39.2 2022-07-21 15:24:47
Enter ".help" for usage hints.
sqlite> .mode box
sqlite> -- # 3.
sqlite> select * from sqlar;
┌─────────────┬───────┬────────────┬────┬────────────────────────────────┐
│ name │ mode │ mtime │ sz │ data │
├─────────────┼───────┼────────────┼────┼────────────────────────────────┤
│ sample1.txt │ 33206 │ 1667722098 │ 30 │ This is Sample Text. (Updated) │
└─────────────┴───────┴────────────┴────┴────────────────────────────────┘
- アーカイブファイルの中身を確認する
- sample1.txtを更新する
- アーカイブファイル内のsample1.txtが更新出来たことが確認出来る
コマンドラインツール起動中にアーカイブ内のファイルを更新
sqlite> -- # 1.
sqlite> select * from sqlar;
┌─────────────┬───────┬────────────┬────┬──────────────────────┐
│ name │ mode │ mtime │ sz │ data │
├─────────────┼───────┼────────────┼────┼──────────────────────┤
│ sample1.txt │ 33206 │ 1667723473 │ 20 │ This is Sample Text. │
└─────────────┴───────┴────────────┴────┴──────────────────────┘
sqlite> -- # 2.
sqlite> .archive -u sample1.txt
sqlite> -- # 3.
sqlite> select * from sqlar;
┌─────────────┬───────┬────────────┬────┬────────────────────────────────┐
│ name │ mode │ mtime │ sz │ data │
├─────────────┼───────┼────────────┼────┼────────────────────────────────┤
│ sample1.txt │ 33206 │ 1667723620 │ 30 │ This is Sample Text. (Updated) │
└─────────────┴───────┴────────────┴────┴────────────────────────────────┘
- アーカイブファイルの中身を確認する
- sample1.txtを更新する
- アーカイブファイル内のsample1.txtが更新出来たことが確認出来る
複数のアーカイブ内のファイルを一括で更新する
スペース区切りでファイルパスを複数指定すればいい。
sqlite> -- # 1.
sqlite> select * from sqlar;
┌─────────────┬───────┬────────────┬────┬─────────────────────────┐
│ name │ mode │ mtime │ sz │ data │
├─────────────┼───────┼────────────┼────┼─────────────────────────┤
│ sample1.txt │ 33206 │ 1667740749 │ 23 │ This is Sample Text 01. │
│ sample2.txt │ 33206 │ 1667740738 │ 23 │ This is Sample Text 02. │
└─────────────┴───────┴────────────┴────┴─────────────────────────┘
sqlite> -- # 2.
sqlite> .archive -u sample1.txt sample2.txt
sqlite> -- # 3.
sqlite> select * from sqlar;
┌─────────────┬───────┬────────────┬────┬───────────────────────────────────┐
│ name │ mode │ mtime │ sz │ data │
├─────────────┼───────┼────────────┼────┼───────────────────────────────────┤
│ sample1.txt │ 33206 │ 1667740774 │ 33 │ This is Sample Text 01. (Updated) │
│ sample2.txt │ 33206 │ 1667740786 │ 33 │ This is Sample Text 02. (Updated) │
└─────────────┴───────┴────────────┴────┴───────────────────────────────────┘
- アーカイブファイルの中身を確認する
- 複数指定してアーカイブ内のファイルを更新する
- 複数のファイルが更新されていることが確認出来る
UpdateではなくUpsert
アーカイブ内に存在しないファイルパスを指定するとそのファイルが新規追加される。 単純なUpdateでは無くいわゆるUpsertのような処理になる。
sqlite> -- # 1.
sqlite> select * from sqlar;
┌─────────────┬───────┬────────────┬────┬─────────────────────────┐
│ name │ mode │ mtime │ sz │ data │
├─────────────┼───────┼────────────┼────┼─────────────────────────┤
│ sample1.txt │ 33206 │ 1667742033 │ 23 │ This is Sample Text 01. │
│ sample2.txt │ 33206 │ 1667742024 │ 23 │ This is Sample Text 02. │
└─────────────┴───────┴────────────┴────┴─────────────────────────┘
sqlite> -- # 2.
sqlite> .archive -u sample3.txt
sqlite> -- # 3.
sqlite> select * from sqlar;
┌─────────────┬───────┬────────────┬────┬─────────────────────────┐
│ name │ mode │ mtime │ sz │ data │
├─────────────┼───────┼────────────┼────┼─────────────────────────┤
│ sample1.txt │ 33206 │ 1667742033 │ 23 │ This is Sample Text 01. │
│ sample2.txt │ 33206 │ 1667742024 │ 23 │ This is Sample Text 02. │
│ sample3.txt │ 33206 │ 1667742155 │ 23 │ This is Sample Text 03. │
└─────────────┴───────┴────────────┴────┴─────────────────────────┘
- アーカイブファイルの中にsample3.txtがないことを確認する
- 「-u」でsample.txtを指定する
- アーカイブファイルにsample3.txtが新規登録されていることが確認出来る
参考URL
-
Command Line Shell ForSQLite
公式のコマンドラインツールに関するドキュメント
https://www.sqlite.org/cli.html -
SQLite Archive Files
公式のSQLite形式のアーカイブに関するドキュメント
https://sqlite.org/sqlar.html