PostgreSQLスキーマ入門
テーブルの名前空間を管理する
PostgreSQLのスキーマの概念、作成・管理方法、検索パスの設定を解説します。
こんな人向けの記事です
- スキーマの概念を理解したい人
- テーブルを論理的にグループ化したい人
- 検索パスの設定方法を知りたい人
Step 1スキーマとは
スキーマは、データベース内でテーブルやビューなどのオブジェクトを論理的にグループ化する名前空間です。デフォルトではpublicスキーマが使用されます。
主な役割: 名前の衝突防止、関連オブジェクトのグループ化、アクセス権限の管理に使われます。
Step 2スキーマの作成と管理
SQL
-- スキーマの作成
CREATE SCHEMA myschema;
-- 所有者を指定して作成
CREATE SCHEMA myschema AUTHORIZATION myuser;
-- スキーマ一覧の表示
\dn
-- スキーマの削除
DROP SCHEMA myschema;
-- 中のオブジェクトごと削除
DROP SCHEMA myschema CASCADE;
注意: CASCADEはスキーマ内のすべてのオブジェクトを再帰的に削除します。
Step 3検索パスの設定
スキーマ名を省略したときに検索するスキーマの順序を設定します。
SQL
-- 現在の検索パスを確認
SHOW search_path;
-- セッションの検索パスを設定
SET search_path TO myschema, public;
-- ユーザーのデフォルト検索パスを設定
ALTER USER username SET search_path TO myschema, public;
Step 4スキーマを指定したアクセス
スキーマ名を修飾子として使用してオブジェクトにアクセスできます。
SQL
-- スキーマ修飾子を使ったテーブル参照
SELECT * FROM myschema.users;
-- スキーマ内にテーブルを作成
CREATE TABLE myschema.products (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
Step 5スキーマの権限管理
SQL
-- スキーマの使用権限を付与
GRANT USAGE ON SCHEMA myschema TO username;
-- スキーマ内の全テーブルへのSELECT権限
GRANT SELECT ON ALL TABLES IN SCHEMA myschema TO username;
-- 今後作成されるテーブルにも権限を適用
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
GRANT SELECT, INSERT, UPDATE ON TABLES TO username;
権限の種類: USAGE(アクセス権)とCREATE(オブジェクト作成権)の2つが主なスキーマ権限です。