2022年11月12日土曜日

SQLite3 SQLiteアーカイブ内のファイルを更新する (.archive -u)

概要

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) │
└─────────────┴───────┴────────────┴────┴────────────────────────────────┘

                
  1. アーカイブファイルの中身を確認する
  2. sample1.txtを更新する
  3. アーカイブファイル内の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) │
└─────────────┴───────┴────────────┴────┴────────────────────────────────┘

                
  1. アーカイブファイルの中身を確認する
  2. sample1.txtを更新する
  3. アーカイブファイル内の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) │
└─────────────┴───────┴────────────┴────┴───────────────────────────────────┘
                
  1. アーカイブファイルの中身を確認する
  2. 複数指定してアーカイブ内のファイルを更新する
  3. 複数のファイルが更新されていることが確認出来る

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. │
└─────────────┴───────┴────────────┴────┴─────────────────────────┘ 
                
  1. アーカイブファイルの中にsample3.txtがないことを確認する
  2. 「-u」でsample.txtを指定する
  3. アーカイブファイルにsample3.txtが新規登録されていることが確認出来る

参考URL