用語集

DB講座(全13回)で回をまたいで繰り返し登場する用語を、1行の説明で引けるようにした 索引である。各回の冒頭にある「この回で新しく出てくる用語」表と同じ説明を載せ、詳しく扱う回への リンクを添えている。読み進めていて意味が取れない語に出会ったら、まずここを引く。

各回の本編で厚く定義される主題語(B-tree、MVCC など)はここには載せない。載せるのは 「主役として説明される機会がないまま、複数の回で使われる脇役の語」である。ただし除外してよいのは、 その回の本編に実際に定義文がある語に限る。主題語であっても定義が見当たらない場合は、まず本編と その回の用語表に定義を置き、それでも回をまたいで引く必要があるならここにも載せる。「主題語だから 本編にあるはずだ」と確認せずに外すと、本編・用語表・用語集のどの網からも落ちる語が生まれる。

記法・演算子

用語一行での説明詳しく扱う回
::(キャスト)値を別の型として解釈し直す記法。式::型名 と書く第5回
||文字列どうしを連結する演算子第1回
ARRAY[...]配列を作るリテラル記法。(ARRAY[...])[n] で n 番目を取り出す第1回
= ANY(配列)配列に含まれるどれかと一致するかを判定する述語。IN (...) を1つのパラメータで書ける形第11回
@>左が右を含むかを判定する演算子。範囲型・jsonb などで使う第6回
&&2つの範囲が重なるかを判定する演算子第6回
~~LIKE と同じ意味の内部表記。EXPLAIN の出力に現れる第7回

型・構文

用語一行での説明詳しく扱う回
VALUES行の並びをその場で書き下し、テーブルとして扱う構文第2回
interval「3日」「1か月」のような期間・長さを表す型。interval '3 days' と書く第5回
GENERATED BY DEFAULT AS IDENTITY値を省略したとき連番を自動採番する列の宣言。明示的な値の挿入も許す第4回
ON CONFLICT ... DO NOTHING一意制約に衝突した行をエラーにせず黙って捨てる INSERT の指定第11回
DISTINCT ON (列)指定した列の値ごとに、ORDER BY の先頭1行だけを残す PostgreSQL 独自の構文第3回
RETURNINGINSERT/UPDATE/DELETE が処理した行の値を、その場で返させる句第6回
DO $$ ... $$関数を定義せずに手続き型のブロックをその場で実行する構文第13回

組み込み関数

用語一行での説明詳しく扱う回
generate_series(1, N)1 から N までの整数を1行ずつ返す集合返却関数第1回
date_trunc('month', 時刻)日時を指定した単位で切り捨て、その期間の先頭の時刻を返す関数第3回
coalesce(a, b)引数を左から見て、最初に NULL でない値を返す関数第3回
array_agg(列)グループ内の値を1つの配列にまとめる集約関数第3回
format(...)書式文字列から SQL 文などの文字列を組み立てる関数。%L はリテラル、%s は素の文字列第13回

PostgreSQL の概念語

用語一行での説明詳しく扱う回
GUCサーバやセッションの動作を変える実行時パラメータの総称(Grand Unified Configuration)第1回
DDL(Data Definition Language)テーブルや制約など、データの入れ物の定義を変更する SQL の総称(CREATE/ALTER/DROP)第5回
DML(Data Manipulation Language)行そのものを読み書きする SQL の総称(SELECT/INSERT/UPDATE/DELETE)第10回
スーパーキー行を一意に識別できる属性の組。最小である必要はなく、候補キーはその中で最小のもの第4回
オペレータクラス(opclass)索引が値をどの演算子でどう比較するかを決める規則の組。同じ B-tree でも比較の仕方を差し替えられる第7回
IMMUTABLE同じ引数なら常に同じ結果を返し、DB の中身を読まない関数につける宣言。式インデックスに使える条件第7回
共有バッファPostgreSQL がディスクのページを載せておく共有メモリ上のキャッシュ第8回
選択率条件を満たす行が全体に占める割合。プランナが読む行数を見積もる基礎になる第8回
work_mem1回のソートやハッシュ表の作成に使ってよいメモリ量の上限を決める設定第8回
拡張統計複数列の相関をプランナに教えるために、明示的に作成する統計情報第8回
SQLSTATEエラーの種類を表す5文字の標準コード。40001 は直列化失敗、40P01 はデッドロック第9回
VACUUM不要になった古い行(死タプル)の領域を回収して再利用可能にする保守処理第12回
autovacuum更新量に応じて VACUUM を自動で走らせる仕組み第12回
WAL(Write-Ahead Log)変更をデータファイルに反映する前に記録する先行書き込みログ第12回
トリガ行の挿入・更新・削除に反応して、自動的に指定した関数を実行させる仕組み第6回
ビュー名前を付けて保存した SELECT 文。テーブルと同じように参照できる第6回
部分索引条件に合う行だけを載せた索引。対象が偏っているとき小さく速い第7回

索引の種類

用語一行での説明詳しく扱う回
B-tree値をソート順に並べた多段の木。等値・範囲・並べ替えに効く既定の索引第7回
GIN1つの値の中に複数の要素を含むもの(配列・jsonb・全文)を検索するための索引第7回
GiST範囲型・幾何型・近傍検索・排他制約のための索引第7回
BRIN物理的な並び順と値の順序が揃った巨大な表向けの、極小サイズの索引第7回
pg_trgm文字列を3文字の断片に分けて類似度・中間一致検索を可能にする拡張第7回

EXPLAIN の出力に出るノード名

すべて第8回で扱う。第7回の実測例にも先に登場するため、意味だけ先に置く。

用語一行での説明
Seq Scanテーブルの全ページを順に読む方式
Index Scan索引をたどって該当行の住所を得て、本体を読む方式
Index Only Scan必要な列がすべて索引にあり、本体を読まずに完結する方式
Bitmap Index Scan / Bitmap Heap Scan索引で「どのページに該当行があるか」の地図を作り、本体をページ順にまとめ読みする2段構えの方式
Nested Loop / Hash Join / Merge Join2つの表を結合する3つの方式
Append複数の子テーブル(パーティションなど)の結果を順に連結するノード
Index Cond索引をたどる時点で使えた条件
Filter行を読んだ後に捨てるために使われた条件
Buffers読んだブロック数。hit はキャッシュ命中、read はディスク読み

その他

用語一行での説明詳しく扱う回
ORM(Object-Relational Mapping)オブジェクトとテーブルの行を対応づけ、SQL を書かずに DB を操作させるライブラリの総称第11回
psql メタコマンドpsql が解釈するバックスラッシュ始まりのコマンド。SQL ではない第1回

関連