スキーマ
PostgreSQL のスキーマとは?
スキーマは、データベース内でテーブル、ビュー、関数などのオブジェクトを格納する名前空間です。修飾されていない名前をどこで探すかは search_path で決まります。
PostgreSQL のデータベースには 1 つ以上のスキーマがあり、各スキーマにはテーブルなどの名前付きオブジェクトが含まれます。同じテーブル名を異なるスキーマに存在させることができ、オブジェクトは schema.table の形式で参照できます。新しいデータベースにはすべて public という名前のスキーマがあります。
スキーマは関連するオブジェクトをまとめ、複数のユーザーやアプリケーションが名前の衝突なしに 1 つのデータベースを共有できるようにし、権限の管理も容易にします。修飾されていない名前は search_path によって解決され、デフォルトではまず現在のユーザーと同じ名前のスキーマを探し、次に public を探します。PostgreSQL 15 以降では、一般ユーザーはデフォルトで public にオブジェクトを作成できなくなりました。
例
この例では、billing スキーマを作成してその中にテーブルを置き、search_path を変更して、スキーマ名なしでテーブルを使えるようにします。
CREATE SCHEMA billing;
CREATE TABLE billing.invoices (id int PRIMARY KEY);
SHOW search_path;
SET search_path TO billing, public;
SELECT count(*) FROM invoices;
RESET search_path;拡張機能なしの標準の PostgreSQL 16 または 17 で動くプレーンな SQL です。破棄してかまわない空のデータベースで実行してください。
出典
PostgreSQL 公式ドキュメント(英語)。