PostgreSQL

PostgreSQLスキーマ入門|テーブルの名前空間を管理する

PostgreSQL スキーマ 名前空間

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つが主なスキーマ権限です。