Sqlite-pragma

提供:Dev Guides
移動先:案内検索

SQLite-PRAGMA

SQLite PRAGMA コマンドは、SQLite環境内のさまざまな環境変数と状態フラグを制御するために使用される特別なコマンドです。 PRAGMA値は読み取ることができ、要件に基づいて設定することもできます。

構文

現在のPRAGMA値を照会するには、プラグマの名前を指定するだけです。

PRAGMA pragma_name;

PRAGMAの新しい値を設定するには、次の構文を使用します。

PRAGMA pragma_name = value;

設定モードは名前または同等の整数のいずれかです。ただし、返される値は常に整数になります。

auto_vacuumプラグマ

*auto_vacuum* プラグマは、自動バキュームモードを取得または設定します。 以下は簡単な構文です。
PRAGMA [database.]auto_vacuum;
PRAGMA [database.]auto_vacuum = mode;

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

Sr.No. Pragma Value & Description
1

0 or NONE

自動バキュームは無効です。 これはデフォルトのモードであり、VACUUMコマンドを使用して手動でバキュームされない限り、データベースファイルのサイズが縮小することはありません。

2

1 or FULL

自動バキュームが有効になっており、完全に自動化されているため、データベースからデータが削除されるとデータベースファイルが縮小します。

3

2 or INCREMENTAL

自動バキュームは有効になっていますが、手動でアクティブにする必要があります。 このモードでは、参照データは維持されますが、空きページは単に空きリストに追加されます。 これらのページは、いつでも* incremental_vacuumプラグマ*を使用して復元できます。

cache_sizeプラグマ

*cache_size* プラグマは、メモリ内ページキャッシュの最大サイズを取得または一時的に設定できます。 以下は簡単な構文です。
PRAGMA [database.]cache_size;
PRAGMA [database.]cache_size = pages;
*pages* 値は、キャッシュ内のページ数を表します。 組み込みのページキャッシュのデフォルトサイズは2,000ページで、最小サイズは10ページです。

case_sensitive_likeプラグマ

*case_sensitive_like* プラグマは、組み込みのLIKE式の大文字と小文字の区別を制御します。 デフォルトでは、このプラグマはfalseです。つまり、組み込みのLIKE演算子は大文字と小文字を無視します。 以下は簡単な構文です。
PRAGMA case_sensitive_like = [true|false];

このプラグマの現在の状態を照会する方法はありません。

count_changesプラグマ

*count_changes* プラグマは、INSERT、UPDATE、DELETEなどのデータ操作ステートメントの戻り値を取得または設定します。 以下は簡単な構文です。
PRAGMA count_changes;
PRAGMA count_changes = [true|false];

デフォルトでは、このプラグマはfalseであり、これらのステートメントは何も返しません。 trueに設定すると、上記の各ステートメントは、操作によって影響を受ける行を示す単一の整数値で構成される1列、1行のテーブルを返します。

database_listプラグマ

*database_list* プラグマは、接続されているすべてのデータベースをリストダウンするために使用されます。 以下は簡単な構文です。
PRAGMA database_list;

このプラグマは、開いているデータベースまたは接続されているデータベースごとに1行の3列のテーブルを返し、データベースシーケンス番号、名前、および関連付けられているファイルを提供します。

エンコーディングプラグマ

*encoding* プラグマは、文字列をエンコードしてデータベースファイルに保存する方法を制御します。 以下は簡単な構文です。
PRAGMA encoding;
PRAGMA encoding = format;

形式の値は、 UTF-8、UTF-16le 、または UTF-16be のいずれかです。

freelist_countプラグマ

*freelist_count* プラグマは、現在空きおよび利用可能としてマークされているデータベースページの数を示す単一の整数を返します。 以下は簡単な構文です。
PRAGMA [database.]freelist_count;

形式の値は、 UTF-8、UTF-16le 、または UTF-16be のいずれかです。

index_infoプラグマ

*index_info* プラグマは、データベースインデックスに関する情報を返します。 以下は簡単な構文です。
PRAGMA [database.]index_info( index_name );

結果セットには、列の順序、テーブル内の列インデックス、および列名を与えるインデックスに含まれる列ごとに1行が含まれます。

index_listプラグマ

*index_list* プラグマは、テーブルに関連付けられているすべてのインデックスをリストします。 以下は簡単な構文です。
PRAGMA [database.]index_list( table_name );

結果セットには、インデックスシーケンス、インデックス名、およびインデックスが一意かどうかを示すフラグを与えるインデックスごとに1行が含まれます。

journal_modeプラグマ

*journal_mode* プラグマは、ジャーナルファイルの保存および処理方法を制御するジャーナルモードを取得または設定します。 以下は簡単な構文です。
PRAGMA journal_mode;
PRAGMA journal_mode = mode;
PRAGMA database.journal_mode;
PRAGMA database.journal_mode = mode;

次の表にリストされているように、5つのサポートされているジャーナルモードがあります。

Sr.No. Pragma Value & Description
1

DELETE

これがデフォルトのモードです。 ここで、トランザクションの終了時に、ジャーナルファイルが削除されます。

2

TRUNCATE

ジャーナルファイルは、ゼロバイトの長さに切り捨てられます。

3

PERSIST

ジャーナルファイルはそのまま残りますが、ヘッダーが上書きされ、ジャーナルが無効になったことを示します。

4

MEMORY

ジャーナルレコードはディスクではなくメモリに保持されます。

5

OFF

ジャーナルレコードは保持されません。

max_page_countプラグマ

*max_page_count* プラグマは、データベースの最大許容ページ数を取得または設定します。 以下は簡単な構文です。
PRAGMA [database.]max_page_count;
PRAGMA [database.]max_page_count = max_page;

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

page_countプラグマ

*page_count* プラグマは、データベース内の現在のページ数を返します。 以下は、単純な構文です-
PRAGMA [database.]page_count;

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

page_sizeプラグマ

*page_size* プラグマは、データベースページのサイズを取得または設定します。 以下は簡単な構文です。
PRAGMA [database.]page_size;
PRAGMA [database.]page_size = bytes;

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

parser_traceプラグマ

*parser_trace* プラグマは、SQLコマンドを解析する際のデバッグ状態の出力を制御します。 以下は簡単な構文です。
PRAGMA parser_trace = [true|false];

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

recursive_triggersプラグマ

*recursive_triggers* プラグマは、再帰トリガー機能を取得または設定します。 再帰トリガーが有効になっていない場合、トリガーアクションは別のトリガーを起動しません。 以下は簡単な構文です。
PRAGMA recursive_triggers;
PRAGMA recursive_triggers = [true|false];

schema_versionプラグマ

*schema_version* プラグマは、データベースヘッダーに格納されているスキーマバージョン値を取得または設定します。 以下は簡単な構文です。
PRAGMA [database.]schema_version;
PRAGMA [database.]schema_version = number;

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

secure_deleteプラグマ

*secure_delete* プラグマは、データベースからコンテンツを削除する方法を制御するために使用されます。 以下は簡単な構文です。
PRAGMA secure_delete;
PRAGMA secure_delete = [true|false];
PRAGMA database.secure_delete;
PRAGMA database.secure_delete = [true|false];

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

sql_traceプラグマ

*sql_trace* プラグマは、SQLトレース結果を画面にダンプするために使用されます。 以下は簡単な構文です。
PRAGMA sql_trace;
PRAGMA sql_trace = [true|false];

このプラグマを含めるには、SQLiteをSQLITE_DEBUGディレクティブでコンパイルする必要があります。

同期プラグマ

*synchronous* プラグマは、現在のディスク同期モードを取得または設定します。これは、SQLiteが物理ストレージにデータを完全に書き込む方法を制御します。 以下は簡単な構文です。
PRAGMA [database.]synchronous;
PRAGMA [database.]synchronous = mode;

SQLiteは、表にリストされている次の同期モードをサポートします。

Sr.No. Pragma Value & Description
1

0 or OFF

同期がまったくありません

2

1 or NORMAL

重要なディスク操作の各シーケンスの後に同期する

3

2 or FULL

重要なディスク操作のたびに同期する

temp_storeプラグマ

*temp_store* プラグマは、一時データベースファイルで使用されるストレージモードを取得または設定します。 以下は簡単な構文です。
PRAGMA temp_store;
PRAGMA temp_store = mode;

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

Sr.No. Pragma Value & Description
1

0 or DEFAULT

コンパイル時のデフォルトを使用します。 通常はFILE。

2

1 or FILE

ファイルベースのストレージを使用します。

3

2 or MEMORY

メモリベースのストレージを使用します。

temp_store_directoryプラグマ

*temp_store_directory* プラグマは、一時データベースファイルに使用される場所を取得または設定します。 以下は簡単な構文です。
PRAGMA temp_store_directory;
PRAGMA temp_store_directory = 'directory_path';

user_versionプラグマ

*user_version* プラグマは、データベースヘッダーに格納されているユーザー定義のバージョン値を取得または設定します。 以下は簡単な構文です。
PRAGMA [database.]user_version;
PRAGMA [database.]user_version = number;

これは32ビットの符号付き整数値で、バージョントラッキングのために開発者が設定できます。

writable_schemaプラグマ

*writable_schema* プラグマは、システムテーブルを変更する機能を取得または設定します。 以下は簡単な構文です。
PRAGMA writable_schema;
PRAGMA writable_schema = [true|false];

このプラグマを設定すると、sqlite_masterテーブルなど、sqlite_で始まるテーブルを作成および変更できます。 プラグマを使用すると、データベースが完全に破損する可能性があるため、注意してください。