Skip to content

データベースオブジェクト 解説

PostgreSQLのコアとなるスキーマオブジェクトすべて —— 構造、テーブル、ビュー、インデックス、型、識別、ルーチン、セキュリティ、レプリケーション —— を1つの濃密なリファレンスにまとめました。

PostgreSQLはデータを名前付きのスキーマオブジェクトに格納します。各オブジェクトには1つの役割があります。テーブルは行を保持し、インデックスは検索を速くし、ルーチンはロジックを保持します。どれを追加するか決める前に、各オブジェクトが何なのかを理解してください。制約とポリシーは、データの整合性を保つルールとして扱いましょう。

リファレンステーブル · 45 項目
45 of 45 rows
構造
クラスタ内の独立したスキーマのカタログ。データを共有すべきでないアプリケーションや環境を分離する。
関連するオブジェクトをまとめる、データベース内の名前付き名前空間。オブジェクトを機能や所有者ごとに整理し、名前の衝突を避ける。
テーブルとインデックスのファイルを置く、ディスク上の名前付きの場所。ホットなテーブルを高速ストレージに置き、コールドデータを安価なディスクに保つ。
修飾なしのオブジェクト名がどのスキーマに解決されるかを決める設定。セッションを正しいスキーマに向けて、クエリで短い名前を使えるようにする。
COMMENT ON で任意のデータベースオブジェクトに保存される説明。次にクエリを書く人が見つける場所でテーブルとカラムを文書化する。
テーブルとビュー
型付きカラムに行を格納する、名前付きのリレーション。永続データの主要な入れ物。
セッションまたはトランザクションの終了時に行が消えるテーブル。接続より長く残してはならない一時データやステージングデータを保持する。
宣言されたキーで子パーティションに分割される親テーブル。行をレンジやリストでパーティションに分散させ、巨大なテーブルを管理しやすく保つ。
行が外部システムに存在し、foreign data wrapper 経由でアクセスされるテーブル。リモートのデータベースやファイルをローカルテーブルのように照会する。
格納されたクエリを仮想テーブルとして公開したもの。同じ行を異なるフィルタやジョインで提示する。
INSERT、UPDATE、DELETE を基底テーブルに転送するシンプルなビュー。テーブルのフィルタ済みまたはジョイン済みスライスを、書き込み可能なまま公開する。
結果セットがディスクに書き込まれ、要求に応じてリフレッシュされるビュー。コストの高い集計やジョインをキャッシュして高速に読み取る。
テーブルが入る場所ならどこでも使える行の集合を返す関数。計算された集合をその場で展開する。unnest が配列を行に変えるのと同じ。
インデックス
等値検索と範囲検索のための平衡ツリーインデックス。ソート可能なカラムで WHERE、JOIN、ORDER BY を高速化する。
キー内の重複値を拒否するインデックス。1つのカラムまたはカラムの組み合わせに一意性を強制する。
非スカラー値のための転置インデックスまたは汎用検索ツリーインデックス。配列、JSONB、全文検索、幾何データにインデックスを付ける。
WHERE 句に一致する行だけに対して構築されるインデックス。ホットなサブセットだけにインデックスを付け、残りを飛ばして容量を節約する。
型と拡張
値が固定されたラベルのリストから来るユーザー定義型。ステータスコードのような閉じた集合にカラムを制限する。
基本型にCHECK制約を加え、カラム型として再利用できるよう名前を付けたもの。空でないテキストのような検証済み定義を1つ、多くのカラムで共有する。
文字列の比較とソートの方法を定義するルール群。大文字小文字、アクセント、特定ロケールに対する正しい順序を得る。
関数、型、演算子をデータベースに追加するインストール可能なパッケージ。PostGIS や pg_trgm などの実績あるツールを1ステップで導入する。
識別と生成
連続する整数を生成する独立したカウンタオブジェクト。複数テーブルが1つのジェネレータを共有するときにシリアルキーを供給する。
SQL標準に従い、内部シーケンスで支えられるテーブルカラム。SERIAL より推奨される、モダンな自動採番の主キー。
同じ行の他のカラムから値が計算されるカラム。手書きなしで導出値を保存・公開する。
ルーチン
値または行を返す名前付きの SQL ブロック。再利用可能なロジックをカプセル化し、クエリ内から呼び出す。
アクションを実行し、独自にトランザクションを制御する名前付きブロック。ルーチン内部でコミットやロールバックを行う複数ステップの ETL。
状態関数と最終関数を通して多くの入力行を1つの値に畳み込むルーチン。加重平均のようなカスタムの集計を定義する。
特定のオペランド型に対して1つ以上の関数に束ねられた記号。独自型に a + b や @> のような自然な構文を与える。
ある型から別の型への変換パスの宣言。値の型変換を制御する。暗黙に起こる変換も含む。
テーブルイベントに束ねられ、自動的に発火するルーチン。INSERT、UPDATE、DELETE の変更を監査、検証、またはカスケードする。
DDL コマンドなどデータベースレベルのイベントで発火するトリガー。データベース全体のスキーマ変更を記録、ブロック、監査する。
バインドされたパラメータで繰り返し実行するために保存された解析済みクエリ。同じクエリの多数の実行で1回の解析と計画を使い回す。
結果セットを開いたまま保持し、行ごとに取得するためのハンドル。大きな結果をページングする、またはルーチン内で行を順に処理する。
セキュリティとルール
権限を持つ名前付きアイデンティティ。ユーザーはログインできるロール。権限を1度まとめ、人、サービス、他のロールに付与する。
オブジェクトの権限をロールに割り当て、または取り除くステートメント。各オブジェクトを読み取り、書き込み、実行できるロールを決める。
グラントとは別に、作成者が持つオブジェクトの変更・削除の組み込み権限。オブジェクトのライフサイクルに責任を持つロールを明示する。
ロールが後で作成するオブジェクトに権限を自動付与する常設の指示。権限を事前設定し、新しいテーブルにアプリロールへの手動グラントを不要にする。
宣言された条件に違反する書き込みを拒否するルール。NOT NULL、CHECK、UNIQUE、PRIMARY KEY、FOREIGN KEY の保証を強制する。
セッションに見せてはならない行を隠すロールごとのルール。アプリケーションクエリを書き換えずにテナント分離やユーザー単位のアクセスを実現する。
1つの名前を別の場所のオブジェクトに解決するエイリアス。Oracle と SQL Server のネイティブ機能。スキーマ構成を移行する。PostgreSQL では代わりに search_path を使う。
pgaudit やベンダーツール経由で、どのアクションをレビュー用に記録するかの定義。コンプライアンスと調査のために、誰が何を読み取り変更したかを証明する。
受信したクエリを別のコマンドに書き換える指示。レガシーな書き込みの転送。PostgreSQL は現在トリガーか更新可能ビューを推奨する。
レプリケーション
どのテーブルと変更種別がレプリカへストリームされるかの送信側定義。データベースが論理レプリケーションのサブスクライバに何を提供するか宣言する。
publication に接続し、その変更をローカルテーブルに適用する受信側。別の PostgreSQL データベースからこのデータベースへ変更を取り込む。
コンシューマが読み取るまでプライマリに WAL を保持させるマーカー。スタンバイやサブスクライバが変更を失わずに再開できることを保証する。