PostgreSQLの用語・機能一覧 意味と使いどころを簡単に解説

当ページのリンクには広告が含まれています。
PostgreSQLの用語一覧の文字と、TOAST・VACUUM・psqlなどの用語、青い象とデータベースを描いた画像

PostgreSQLのSQLや設定、ログで見かける用語・機能を使う場面ごとにまとめました。それぞれの意味と用途、混同しやすい点を短く確認できます。他のDBでも使われる用語を含め説明はPostgreSQL 18の公式ドキュメントを基準にしています。

目次

接続・設定で見かける用語

psql

PostgreSQLに接続しSQLを実行するためのコマンドラインツールです。テーブル一覧を表示する\dtや終了する\qなどpsql専用のメタコマンドも使えます。これらはSQLそのものとは別の命令です。

pg_hba.conf

接続元やユーザー、データベースごとに認証方法を指定する設定ファイルです。接続エラーにno pg_hba.conf entryと出たときなどに確認します。複数の設定がある場合は接続条件に最初に一致したものが使われます。

ロールとユーザー

ロールはデータベースへのアクセス権限やオブジェクトの所有者を管理する単位です。PostgreSQLではユーザーとグループをロールで扱い、ログインできるロールをユーザーとして使います。ユーザー作成や権限エラーを調べるときに出てくる言葉です。

search_pathとpublicスキーマ

search_pathはスキーマ名を省略したときにテーブルなどを探す順序を決める設定です。publicはデータベースに初めから用意されるスキーマの名前です。

スキーマという仕組み自体は他のDBにもあります。PostgreSQLで「作ったテーブルが見つからない」ときは接続先のデータベースに加えこの検索順序が確認ポイントになります。

JDBC接続で参照先のスキーマを指定したい場合はcurrentSchemaの設定方法とsearch_pathとの違いを確認できます。

template0とtemplate1

新しいデータベースを作る際のコピー元です。通常はtemplate1が使われ、そこに追加したオブジェクトも新しいデータベースへ引き継がれます。

template0は初期状態を保つためのテンプレートです。template1に加えた変更を含めたくない場合や文字コードなどを変えて作成する場合に使います。

データベースクラスタ

PostgreSQLでは1つのサーバーインスタンスが管理するデータベースの集まりを指します。ロールなどクラスタ全体で共有するオブジェクトも含まれます。

「クラスタ」という言葉自体は一般的ですが、この用法は混同しやすいところです。複数台のサーバーで構成されているという意味ではなくinitdbで初期化する管理単位です。

SQLを書くときに使う機能

シーケンス・serial・IDENTITY

シーケンスはIDなどに使う数値を順に発行するオブジェクトです。serialはシーケンスを使う自動採番列を簡単に定義する書き方でGENERATED ... AS IDENTITYも自動採番列を定義するために使います。

どちらも欠番のない連番を保証するものではありません。たとえば採番後にトランザクションを取り消した場合、その番号は元に戻りません。

ON CONFLICTとUPSERT

ON CONFLICTはINSERT時に主キーやUNIQUE制約などとの競合が起きた場合の処理を指定する句です。DO NOTHINGなら挿入を見送り、DO UPDATEなら競合した既存行を更新します。

行がなければ追加し、あれば更新する処理はUPSERTと呼ばれます。PostgreSQLではINSERT ... ON CONFLICT DO UPDATEで実現できます。

generate_series

指定した範囲の数値や日時を一定の間隔で複数行として生成する関数です。連続した日付の一覧やテストデータを作るときに使います。

集計対象のデータが存在しない日や時間帯も表示したい場合はgenerate_seriesで作った一覧と元のデータを結合する方法があります。

generate_seriesで時間軸を作り、データがない時間帯も0件として表示する集計SQLを実行結果とともに確認できます。

データの保存で使われる用語

jsonとjsonb

JSON形式のデータを保存するための型です。jsonは入力したテキストを保持しjsonbは検索や処理に適した内部形式へ変換して保存します。

jsonbはインデックスを使った検索にも対応しますがオブジェクトのキー順や重複したキーは保持しません。元の表記を残したいか、保存後に検索・加工したいかで使い分けます。

TOAST

大きなデータを圧縮したり別のTOASTテーブルに分割して保存したりするPostgreSQLの仕組みです。正式名称はThe Oversized-Attribute Storage Techniqueです。

長い文字列などを扱うために使われ、別のTOASTテーブルへ保存した場合は元の行にそのデータへの参照を保持します。アプリからは基本的に普通の列として読み書きでき、保存先の分割を意識する必要はありません。

ctid・xmin・xmax

通常のテーブルで参照できるシステム列です。ctidは行のバージョンの物理的な位置、xminはそのバージョンを作ったトランザクションのIDを表します。

xmaxは削除などに関わる情報を持ちますが、値が0以外でも参照可能な行はあります。ctidは更新やVACUUM FULLで変わるため固定の行IDとしては使えません。

OIDとpg_class

OIDはObject Identifierの略でPostgreSQLではテーブルや型などのオブジェクトを識別する番号に使われます。たとえばpg_classはテーブルやインデックスなどの情報を記録するシステムカタログです。

OIDはデータベース内のオブジェクトを識別する番号で、テーブルの各行を識別する主キーとは用途が異なります。

UNLOGGEDテーブル

テーブルのデータ変更をWALに記録しない形式です。書き込みの負担を減らせる一方、クラッシュや正常でない停止のあとには内容が空になります。スタンバイにも内容は複製されません。

失われても再作成できる作業用データなどが用途です。セッション終了時などに削除される一時テーブルとは性質が異なります。

更新後の整理に関する用語

VACUUMとVACUUM FULL

PostgreSQLのVACUUMは更新や削除で不要になった古い行の領域を再利用できるようにする処理です。通常のVACUUMではファイルサイズがそのまま残ることがあります。

VACUUM FULLはテーブルを書き直して領域を詰めますが、実行中は対象テーブルへの読み書きを妨げる強いロックが必要です。

autovacuum

VACUUMや実行計画に使う統計情報を収集するANALYZEを自動で行う仕組みです。PostgreSQLの運用では古い行の整理や統計情報の更新を任せる基本的な機能になります。

自動的に行われるのは通常のVACUUMでVACUUM FULLは実行しません。

フリーズとトランザクションIDの周回

PostgreSQLの行にはトランザクションIDに関する情報が記録されます。このIDは番号を繰り返し使うため、古い行が新しいものと取り違えられないようにする処理が必要です。

十分古い行の挿入トランザクションを常に過去のものとして扱えるようにするのがフリーズです。VACUUMにはこの処理を進める役割もあります。

HOT(Heap-Only Tuples)

行の更新時にインデックスへの新しい項目の追加を省けるPostgreSQLの最適化です。更新対象の列や同じページ内の空き領域など条件がそろうと使われます。

更新の多いテーブルを調べるときに見かける用語で、統計情報ではHOT更新の回数も確認できます。

状態の確認・機能追加で使う名前

EXPLAINとEXPLAIN ANALYZE

EXPLAINはSQLでデータをどのように読み取り、結合するかという実行計画を表示します。EXPLAIN ANALYZEは対象のSQLを実際に実行し、処理時間や行数の実測値も表示します。

遅いSQLを調べる際に使いますがUPDATEやDELETEにEXPLAIN ANALYZEを付けると更新や削除も実行されます。

実行計画のcost・rowsの読み方やインデックス作成前後の実測、UPDATE・DELETEを調べる際の注意点を確認できます。

ANALYZEと統計情報

ANALYZEはテーブル内の値の分布などを調べ、実行計画を選ぶための統計情報を更新するコマンドです。大量のデータ追加や更新のあとSQLの実行計画を調べる場面で見かけます。

単独のANALYZEは統計情報の収集、EXPLAIN ANALYZEはSQLを実行して実測値を確認するためのものです。

pg_stat_activity

サーバープロセスの現在の状態やSQL、待機状況などを確認するビューです。接続が増えているときや処理がなかなか終わらないときの調査に使います。参照できる情報は権限などによって異なります。

pg_stat_statements

SQLの呼び出し回数や実行時間などを集計する追加モジュールです。似た形のSQLをまとめて確認できるため、負荷の大きいSQLを探すのに役立ちます。

pg_stat_activityが現在の状態を調べるためのものなら、こちらは蓄積した実行統計を調べるためのものです。

shared_buffersとwork_mem

shared_buffersはデータのページをキャッシュする共有バッファの大きさを指定する設定です。work_memはソートやハッシュ処理などの作業で使うメモリ量の基準になります。

work_memはソートなどの処理ごとに使うメモリ量の基準です。1つのSQLに複数の処理が含まれたり複数の接続で同時に処理したりすると、全体の使用量は設定値を超えます。ハッシュ処理ではさらにhash_mem_multiplierの設定も関係します。

エクステンション(CREATE EXTENSION)

関数やデータ型などをまとめて追加・管理する仕組みです。CREATE EXTENSIONで接続中のデータベースに拡張機能を登録します。拡張によってはサーバー側のファイル配置や設定も必要です。

postgres_fdw

別のPostgreSQLサーバーにあるテーブルを接続中のデータベースからSQLで扱うための拡張機能です。

外部データへの接続を担う仕組みはFDW(Foreign Data Wrapper)と呼ばれます。postgres_fdwはその接続先がPostgreSQLの場合に使う拡張機能です。

データの入出力・バックアップで使う機能

COPYと\copy

COPYはテーブルのデータをまとめて取り込んだり書き出したりするSQLコマンドです。CSVなどの入出力に使います。

COPYにファイル名を指定した場合はサーバー側のファイルを扱います。psqlの\copyはpsqlを実行している端末側のファイルを扱うため、ファイルの場所や権限を確認するときに区別が必要です。

pg_dumpとpg_restore

pg_dumpは1つのデータベースの定義やデータを論理バックアップとして書き出すツールです。pg_restoreはカスタム形式などで作成したバックアップの復元に使います。

SQL文を並べたプレーン形式のバックアップはpsqlなどで実行して復元します。バックアップの出力形式によって復元に使うツールが変わります。

行・トランザクション・復旧に関する用語

行の管理や同時実行、障害からの復旧に関する用語です。他のDBでも使われますがここではPostgreSQLでの意味をまとめています。

用語PostgreSQLで読むときの意味・注意点
タプル(tuple)行や行のバージョンを指す場面で使われます。統計情報のn_live_tupなどにも名前が現れます。
リレーション(relation)テーブルに加え、インデックスやビューなどを含む呼び方です。relation does not existというエラーでも見かけます。
MVCC複数のバージョンを使って同時実行を制御する仕組みです。通常の読み取りと書き込みが互いに妨げ合いにくくなりますがロック待ちがなくなるわけではありません。
デッドタプルどのトランザクションからも参照する必要がなくなった古い行のバージョンです。n_dead_tupはその推定数を表します。
ブロート(bloat)不要な行の領域や空き領域などでテーブルやインデックスが実データに対して膨らむことです。デッドタプルの数とは同じものではありません。
WALデータファイルへ変更を書き出す前に復旧に必要なログをディスクへ記録する仕組みです。そのログもWALと呼ばれ障害復旧や物理レプリケーションなどに使われます。
LSNPostgreSQLではWAL内の位置を示します。レプリケーションの進み具合などを調べるときに使われます。
チェックポイント復旧に必要なWALの範囲を抑えるため、変更されたデータをディスクへ反映する処理の区切りです。

用語が分かると、確認する場所も絞れる

接続できないときはpg_hba.conf、テーブルが見つからないときはsearch_path、実行中の処理を調べたいときはpg_stat_activityが確認先の候補になります。

意味を覚えるだけでなくどんな場面で使う言葉なのかを押さえておくと、エラーや設定を調べるときにも役立ちます。


用語の意味を確認したあと、SQLの書き方や接続設定、Dockerでの開発環境構築に進みたい場合は、データベースまとめから目的別に探せます。

  • URLをコピーしました!
目次