PostgreSQL | スキーマ | スキーマの作成(CREATE SCHEMA)

CREATE SCHEMA コマンドを使用して PostgreSQL でスキーマを新しく作成する方法について説明する。

新しいスキーマを作成する

スキーマを作成するには CREATE SCHEMA コマンドを使用する。形式は次のとおりである。

CREATE SCHEMA schema_name

スキーマ名 (schema_name) を指定して、現在接続しているデータベースに新しいスキーマを作成する。スキーマ名には任意の名前を指定できるが、pg_ で始まる名前は特別な意味を持つため使用できない。

スキーマを作成するには、コマンドを実行するロールがスーパーユーザーであるか、スキーマを作成するデータベースで CREATE 権限を持っている必要がある。

それでは実際に試してみる。スキーマを作成するデータベースに接続する。今回は devkuma データベースにスキーマを作成する。

postgres=# \c devkuma
접속정보: 데이터베이스="devkuma", 사용자="postgres".
devkuma=#

devkuma データベースに現在作成されているスキーマを確認するため、psql メタコマンド \dn を実行する。

devkuma=# \dn
스키마(schema) 목록
  이름  |  소유주
--------+----------
 public | postgres
(1개 행)


devkuma=#

デフォルトで作成される public スキーマが存在することを確認できる。

では新しいスキーマを作成する。次のように実行する。

devkuma=# create schema myschema;
CREATE SCHEMA
devkuma=#

新しいスキーマが作成された。確認のため、もう一度 \dn コマンドを実行する。

devkuma=# \dn
 스키마(schema) 목록
   이름   |  소유주
----------+----------
 myschema | postgres
 public   | postgres
(2개 행)


devkuma=#

myschema スキーマが作成されていることを確認できる。

作成するスキーマの所有者を指定する

スキーマを作成した場合、作成されたスキーマの所有者は通常スキーマを作成したロールになるが、別のロールを所有者として指定してスキーマを作成できる。形式は次のとおりである。

CREATE SCHEMA schema_name AUTHORIZATION role_specification

スキーマ名 (schema_name) とスキーマの所有者 (role_specification) を指定して新しいスキーマを作成する。この形式でスキーマを作成するには、コマンドを実行するロールが所有者となるロールの直接または間接のメンバーであるか、スーパーユーザーである必要がある。

それでは実際に試してみる。スキーマを作成するデータベースに接続した後、次のように実行する。

devkuma=# create schema orange_schema authorization orange;
CREATE SCHEMA
devkuma=# 

orange ロールを所有者として orange_schema スキーマを作成した。確認のため、\dn コマンドを実行する。

devkuma=# \dn
   스키마(schema) 목록
     이름      |  소유주
---------------+----------
 myschema      | postgres
 orange_schema | orange
 public        | postgres
(3개 행)


devkuma=#

既存のスキーマに加えて、orange ロールが所有者である orange_schema が新しく作成されていることを確認できる。

新しいスキーマを作成するときにテーブルなどのオブジェクトを作成する

新しいスキーマを作成するとき、スキーマ内にテーブルやインデックスなどのオブジェクトを同時に作成できる。形式は次のとおりである。

CREATE SCHEMA schema_name
  [ AUTHORIZATION role_specification ] 
  schema_element [ ... ]

schema_element に同時に作成する SQL コマンドを記述する。記述できるコマンドは CREATE TABLE、CREATE VIEW、CREATE INDEX、CREATE SEQUENCE、CREATE TRIGGER、GRANT のいずれかである。複数のコマンドを記述する場合は、SQL コマンドの末尾にセミコロン (;) を付けてはいけない。

それでは実際に試してみる。スキーマを作成するデータベースに接続した後、次のように実行する。

devkuma=# create schema testschema create table testtbl (id integer);
CREATE SCHEMA
devkuma=#

testschema スキーマを作成し、作成されたスキーマに testtbl テーブルを作成した。確認のため、\dt コマンドを実行する。

devkuma=# \dt testschema.*
         릴레이션(relation) 목록
   스키마   |  이름   |  종류  |  소유주
------------+---------+--------+----------
 testschema | testtbl | 테이블 | postgres
(1개 행)


devkuma=#

作成した testschematesttbl テーブルが作成されていることを確認できる。

ここまで、CREATE SCHEMA コマンドを使用して新しいスキーマを作成する方法について説明した。