PostgreSQLのスキーマは、データベース内のオブジェクト(テーブル、ビュー、インデックスなど)を論理的に整理し、分離するための命名空間です。同じデータベース内で複数のデータ集合を効率的かつ安全に管理するために非常に有用です。本記事では、スキーマの特徴、操作方法、利用シーンについて詳しく解説します。
スキーマの主な特徴
命名空間としての役割
スキーマを利用すると、同じ名前のオブジェクトを複数作成可能です。例えば、public
スキーマとsales
スキーマにそれぞれusers
テーブルを作成できます。論理的な分離
データをスキーマごとに分離することで、異なるアプリケーションやユーザーのデータを安全に管理できます。柔軟な権限管理
スキーマ単位でアクセス権限を設定できるため、データ保護が容易です。デフォルトのスキーマ
PostgreSQLにはデフォルトでpublic
スキーマが存在し、スキーマを指定しない場合、この中にオブジェクトが作成されます。検索パス(Search Path)
SET search_path
コマンドでスキーマの検索優先順位を設定可能。例:
sql SET search_path TO sales, public;
スキーマの一般的な操作方法
スキーマの作成
sql CREATE SCHEMA スキーマ名;
スキーマ内にオブジェクトを作成
sql CREATE TABLE スキーマ名.テーブル名 (...);
スキーマの削除
sql DROP SCHEMA スキーマ名 [CASCADE];
スキーマの権限設定
sql GRANT USAGE ON SCHEMA スキーマ名 TO ユーザー名;
スキーマの一覧表示
sql \dn
スキーマの利用シーン
マルチテナントアプリケーション
各テナント専用スキーマでデータを隔離。モジュール化された設計
システム機能ごとにスキーマを分け、管理を簡易化。データ共有と権限管理
機密データと共有データを別々のスキーマで管理。
スキーマと権限管理の実例
新しいスキーマを作成し権限を設定
sql CREATE SCHEMA hr; GRANT USAGE ON SCHEMA hr TO user1; GRANT SELECT, INSERT ON ALL TABLES IN SCHEMA hr TO user1;
スキーマにオブジェクトを追加
sql CREATE TABLE hr.employees ( id SERIAL PRIMARY KEY, name VARCHAR(100), position VARCHAR(50) );
アクセス制御
ユーザーuser1
はhr
スキーマ内のデータにのみアクセス可能。
まとめ
PostgreSQLのスキーマは、データの整理、ユーザーの分離、柔軟な権限管理を可能にする強力な機能です。マルチテナントやモジュール化されたシステム設計など、さまざまな用途で活用できます。ぜひプロジェクトに適したスキーマ管理を取り入れてみてください!