スキーマを作成する(CREATE SCHEMA)
PostgreSQL では新しいスキーマを作成するときに CREATE SCHEMA コマンドを使用します。ここでは PostgreSQL でスキーマを新規に作成する方法について解説します。
(Last modified: )
新しいスキーマを作成する
スキーマを作成するには CREATE SCHEMA コマンドを使用します。書式は次の通りです。
CREATE SCHEMA schema_name
スキーマ名( schema_name )を指定して現在接続しているデータベースに新しいスキーマを作成します。スキーマ名は任意の名前を指定できますが、 pg_ で始まる名前は特別な意味を持つため使用できません。
スキーマを作成するにはコマンドを実行するロールがスーパーユーザーか、スキーマを作成するデータベースで CREATE 権限を持っている必要があります。
-- --
それでは実際に試してみます。スキーマを作成するデータベースに接続してください。今回は mydb データベースにスキーマを作成します。
\c mydb
mydb データベースに現在作成済みのスキーマを確認するために、 psql メタコマンドの \dn コマンドを実行します。
\dn
デフォルトで作成されている public スキーマの他に myschema スキーマが作成されていることが確認できます。
それでは新しいスキーマを作成します。次のように実行してください。
create schema test;
新しいスキーマが作成されました。確認のためにあらためて \dn コマンドを実行します。
test スキーマが作成されていることが確認できました。
作成するスキーマの所有者を指定する
スキーマを作成した場合、作成されたスキーマの所有者はスキーマを作成したロールとなりますが、所有者として別のロールを指定してスキーマを作成することもできます。次の書式を使用します。
CREATE SCHEMA schema_name AUTHORIZATION role_specification
スキーマ名( schema_name )とスキーマの所有者( role_specification )を指定して新しいスキーマを作成します。この書式でスキーマを作成するには、コマンドを実行するロールが所有者となるロールの直接的または間接的なメンバであるか、スーパーユーザである必要があります。
それでは実際に試してみます。スキーマを作成するデータベースに接続したあと、次のように実行してください。
create schema momoschema authorization momo;
momo ロールを所有者とする momoschema スキーマを作成しました。確認のために \dn コマンドを実行します。
\dn
既に作成されていたスキーマに加えて momo ロールが所有者となっている momoschema があらたに作成されていることが確認できます。
新しいスキーマを作成すると同時にスキーマ内にテーブルなどのオブジェクトを作成する
新しいスキーマを作成すると同時に、スキーマ内にテーブルやインデックスといったオブジェクトを同時に作成することができます。書式は次の通りです。
CREATE SCHEMA schema_name [ AUTHORIZATION role_specification ] schema_element [ ... ]
schema_element には同時に作成する SQL コマンドを記述します。記述できるのは CREATE TABLE 、 CREATE VIEW 、 CREATE INDEX 、 CREATE SEQUENCE 、 CREATE TRIGGER 、 GRANT のいずれかです。複数記述する場合は SQL コマンドの最後にセミコロン(;)を記述しないでください。
それでは実際に試してみます。スキーマを作成するデータベースに接続したあと、次のように実行してください。
create schema testschema create table testtbl (id integer);
testschema スキーマを作成し、作成したスキーマ内に testtbl テーブルを作成しました。確認のために \dt コマンドを実行してください。
\dt testschema.*
作成した testschema の中に testtbl テーブルが作成されていることが確認できます。
-- --
CREATE SCHEMA コマンドを使って新しいスキーマを作成する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。