2021年1月19日火曜日

SQLite 3 pragma schema_versionとは?

概要

Pragma schema_versionにはDB構成が変更された回数が記録されている。
これだけ聞くとバージョン管理に使えそうだが、実はそうでもない。

詳細

DBの構成を変更したときにschema_versionの数字が +1される。 例えば以下のような操作をした時。

  • 新規テーブルの作成
  • テーブルの変更
  • テーブルの削除

他にもビューの編集やトリガーの編集でも +1される。 データの新規挿入、更新、削除などでは変更されない。

注意

schema_versionの値はvacuumコマンドでも変更されてしまう。
これは仕様で対処のしようがないため、vacuumを随時実行しているような場合、 schema_versionをDB構成のバージョンとして扱うのは難しい。 さらに詳しい情報は 公式サイト を参照のこと。

確認方法

以下のコマンドを実行する。


pragma schema_version;
                

実行例

実行環境
  • Windows 10 64bit
  • SQLite3 (3.34.0) Command-Line Shell

sqlite> -- # 1.
sqlite> pragma schema_version;
0

sqlite> -- # 2.
sqlite> create table test (id integer, name text);
sqlite> pragma schema_version;
1

sqlite> alter table test add column email text;
sqlite> pragma schema_version;
2

sqlite> -- # 3.
sqlite> insert into test values (1, 'sample_name', 'sample@example.com');
sqlite> pragma schema_version;
2
sqlite> delete from test;
sqlite> pragma schema_version;
2

sqlite> -- # 4.
sqlite> vacuum;
sqlite> pragma schema_version;
3
                
  1. DB新規作成時、schema_versionの値は0
  2. テーブル作成や変更でschema_versionが増えていく
  3. データ挿入や削除ではschema_versionは変わらない
  4. vacuumを実行するとschema_versionが増える

pragma schema_version の値の変更

一応schema_versionの値は自由に変更できる。


pragma schema_version=integer;
                

しかし、schema_versionを変更した状態でデータを操作すると データが壊れる可能性があるので基本的には変更しない方がいい。

参考URL