SQLite PRAGMA

SQLite のPRAGMAPRAGMA コマンドは特別なコマンドであり、SQLite 環境内でさまざまな環境変数や状態フラグを制御するために使用できます。PRAGMA 値は読み取り可能で、必要に応じて設定することもできます。

構文

現在の PRAGMA 値をクエリするには、その pragma の名前を指定するだけで済みます:

PRAGMA pragma_name;

PRAGMA に新しい値を設定するには、構文は次のとおりです:

PRAGMA pragma_name = value;

設定モードは、名前または同等の整数値を使用できますが、返される値は常に整数になります。

auto_vacuum Pragma

auto_vacuumPragma は auto-vacuum モードを取得または設定します。構文は次のとおりです:

PRAGMA [database.]auto_vacuum;
PRAGMA [database.]auto_vacuum = mode;

ここで、modeは次のいずれかです:

Pragma 値説明
0 または NONEAuto-vacuum を無効にします。これはデフォルトモードであり、手動で VACUUM コマンドを使用しない限り、データベースファイルのサイズは縮小されないことを意味します。
1 または FULLAuto-vacuum を有効にします。これは全自動です。このモードでは、データがデータベースから削除されるにつれて、データベースファイルを縮小できます。
2 または INCREMENTALAuto-vacuum を有効にしますが、手動でアクティブにする必要があります。このモードでは、参照データが維持され、空きページは空きリストにのみ配置されます。これらのページはいつでも使用できます。incremental_vacuum pragma上書きできます。

cache_size Pragma

cache_sizePragma は、メモリ内のページキャッシュの最大サイズを取得または一時的に設定できます。構文は次のとおりです:

PRAGMA [database.]cache_size;
PRAGMA [database.]cache_size = pages;

pages値はキャッシュ内のページ数を表します。組み込みページキャッシュのデフォルトサイズは 2,000 ページで、最小サイズは 10 ページです。

case_sensitive_like Pragma

case_sensitive_likePragma は、組み込みの LIKE 式の大文字と小文字の区別を制御します。デフォルトでは、この Pragma は false であり、組み込みの LIKE 演算子が英字の大文字と小文字を無視することを意味します。構文は次のとおりです:

PRAGMA case_sensitive_like = [true|false];

現在、この Pragma の現在の状態をクエリする方法はありません。

count_changes Pragma

count_changesPragma は、INSERT、UPDATE、DELETE などのデータ操作ステートメントの戻り値を取得または設定します。構文は次のとおりです:

PRAGMA count_changes;
PRAGMA count_changes = [true|false];

デフォルトでは、この Pragma は false であり、これらのステートメントは何も返しません。true に設定すると、前述の各ステートメントは、操作が影響を与えた行数を表す単一の整数値で構成される、1 行 1 列のテーブルを返します。

database_list Pragma

database_listPragma は、すべてのデータベース接続をリストするために使用されます。構文は次のとおりです:

PRAGMA database_list;

この Pragma は、データベースを開くかアタッチするたびに、データベース内のシーケンス番号、その名前、および関連するファイルを返す、1 行 3 列のテーブルを返します。

encoding Pragma

encodingPragma は、文字列がデータベースファイル内でどのようにエンコードされ、保存されるかを制御します。構文は次のとおりです:

PRAGMA encoding;
PRAGMA encoding = format;

フォーマット値は、UTF-8、UTF-16le、UTF-16be のいずれかです。

freelist_count Pragma

freelist_countPragma は、現在空きとしてマークされ利用可能なデータベースページの数を表す整数を返します。構文は次のとおりです:

PRAGMA [database.]freelist_count;

index_info Pragma

index_infoPragma は、データベースインデックスに関する情報を返します。構文は次のとおりです:

PRAGMA [database.]index_info( index_name );

結果セットは、指定された列シーケンス内のインデックス、テーブル内の列インデックス、列名を含む各列に対して 1 行を表示します。

index_list Pragma

index_listPragma は、テーブルに関連付けられているすべてのインデックスをリストします。構文は次のとおりです:

PRAGMA [database.]index_list( table_name );

結果セットは、指定された列シーケンス、インデックス名、インデックスが一意かどうかを示すフラグごとに 1 行を表示します。

journal_mode Pragma

journal_modePragma は、ログファイルの保存方法と処理方法を制御するログモードを取得または設定します。構文は次のとおりです:

PRAGMA journal_mode;
PRAGMA journal_mode = mode;
PRAGMA database.journal_mode;
PRAGMA database.journal_mode = mode;

ここでは 5 つのログモードがサポートされています:

Pragma 値説明
DELETEデフォルトモード。このモードでは、トランザクションの終了時にログファイルが削除されます。
TRUNCATEログファイルはゼロバイト長に切り詰められます。
PERSISTログファイルはその場に残されますが、ヘッダーが書き換えられ、ログが無効になったことが示されます。
MEMORYログレコードはディスクではなくメモリに保持されます。
OFFログレコードは保持されません。

max_page_count Pragma

max_page_countPragma は、データベースに許可される最大ページ数を取得または設定します。構文は次のとおりです:

PRAGMA [database.]max_page_count;
PRAGMA [database.]max_page_count = max_page;

デフォルト値は 1,073,741,823 です。これは 1 ギガページに相当し、つまりデフォルトの 1 KB ページサイズの場合、データベースは約 1 テラバイトまで拡張できます。

page_count Pragma

page_countPragma は、現在のデータベース内のページ数を返します。構文は次のとおりです:

PRAGMA [database.]page_count;

データベースファイルのサイズは、page_count * page_size である必要があります。

page_size Pragma

page_sizePragma は、データベースページのサイズを取得または設定します。構文は次のとおりです:

PRAGMA [database.]page_size;
PRAGMA [database.]page_size = bytes;

デフォルトでは、許可されるサイズは 512、1024、2048、4096、8192、16384、32768 バイトです。既存のデータベースページサイズを変更する唯一の方法は、ページサイズを設定し、すぐにそのデータベースに対して VACUUM を実行することです。

parser_trace Pragma

parser_tracePragma は、SQL コマンドを解析する際に、デバッグ状態の出力を制御します。構文は次のとおりです:

PRAGMA parser_trace = [true|false];

デフォルトでは false に設定されていますが、true に設定すると有効になり、SQL パーサーは SQL コマンドを解析する際にその状態を出力します。

recursive_triggers Pragma

recursive_triggersPragma は、再帰トリガー機能を取得または設定します。再帰トリガーが有効でない場合、1 つのトリガーアクションが別のトリガーを起動することはありません。構文は次のとおりです:

PRAGMA recursive_triggers;
PRAGMA recursive_triggers = [true|false];

schema_version Pragma

schema_versionPragma は、データベースヘッダーに保存されているスキーマバージョン値を取得または設定します。構文は次のとおりです:

PRAGMA [database.]schema_version;
PRAGMA [database.]schema_version = number;

これは 32 ビットの符号付き整数値で、スキーマの変更を追跡するために使用されます。スキーマ変更コマンド(CREATE... や DROP... など)が実行されるたびに、この値は増加します。

secure_delete Pragma

secure_deletePragma は、コンテンツがデータベースからどのように削除されるかを制御するために使用されます。構文は次のとおりです:

PRAGMA secure_delete;
PRAGMA secure_delete = [true|false];
PRAGMA database.secure_delete;
PRAGMA database.secure_delete = [true|false];

安全な削除フラグのデフォルト値は通常オフですが、これは SQLITE_SECURE_DELETE ビルドオプションによって変更できます。

sql_trace Pragma

sql_tracePragma は、SQL トレース結果を画面にダンプするために使用されます。構文は次のとおりです:

PRAGMA sql_trace;
PRAGMA sql_trace = [true|false];

この Pragma を参照するには、SQLite を SQLITE_DEBUG ディレクティブを使用してコンパイルする必要があります。

synchronous Pragma

synchronousPragma は、現在のディスク同期モードを取得または設定します。このモードは、SQLite がデータを物理ストレージに書き込む積極性の度合いを制御します。構文は次のとおりです:

PRAGMA [database.]synchronous;
PRAGMA [database.]synchronous = mode;

SQLite は次の同期モードをサポートしています:

Pragma 値説明
0 または OFF同期は実行されません。
1 または NORMAL重要なディスク操作の各シーケンスの後に同期します。
2 または FULL各重要なディスク操作の後に同期します。

temp_store Pragma

temp_storePragma は、一時データベースファイルで使用されるストレージモードを取得または設定します。構文は次のとおりです:

PRAGMA temp_store;
PRAGMA temp_store = mode;

SQLite は次のストレージモードをサポートしています:

Pragma 値説明
0 または DEFAULTデフォルトではコンパイル時のモードが使用されます。通常は FILE です。
1 または FILEファイルベースのストレージを使用します。
2 または MEMORYメモリベースのストレージを使用します。

temp_store_directory Pragma

temp_store_directoryPragma は、一時データベースファイルの場所を取得または設定します。構文は次のとおりです:

PRAGMA temp_store_directory;
PRAGMA temp_store_directory = 'directory_path';

user_version Pragma

user_versionPragma は、データベースヘッダーに保存されているユーザー定義のバージョン値を取得または設定します。構文は次のとおりです:

PRAGMA [database.]user_version;
PRAGMA [database.]user_version = number;

これは 32 ビットの符号付き整数値で、開発者がバージョン追跡の目的で設定できます。

writable_schema Pragma

writable_schemaPragma は、システムテーブルを変更できるかどうかを取得または設定します。構文は次のとおりです:

PRAGMA writable_schema;
PRAGMA writable_schema = [true|false];

この Pragma を設定すると、sqlite_ で始まるテーブル(sqlite_master テーブルを含む)を作成および変更できます。この Pragma を使用する際は注意が必要です。データベース全体が破損する可能性があるためです。

その他の拡張