PostgreSQL | スキーマ | スキーマの変更(ALTER SCHEMA)
ALTER SCHEMA コマンドを使用して、作成済みのスキーマを変更する方法について説明する。変更できるのは、スキーマ名と所有者である。
スキーマ名の変更
まず ALTER SCHEMA コマンドを使用してスキーマ名を変更する方法である。形式は次のとおりである。
ALTER SCHEMA name RENAME TO new_name
現在のスキーマ名 (name) を新しいスキーマ名 (new_name) に変更する。
スキーマ名を変更するには、コマンドを実行するロールがスーパーユーザーまたはスキーマ所有者であり、スキーマが作成されているデータベースで CREATE 権限を持っている必要がある。
–
それでは実際に試してみる。psql メタコマンド \dn を実行して確認すると、現在の devkuma データベースには、デフォルトで作成される public 以外に 2 つのスキーマが作成されている。
devkuma=# \dn
스키마(schema) 목록
이름 | 소유주
---------------+----------
myschema | postgres
orange_schema | orange
public | postgres
(3개 행)
devkuma=#
このうち orange_schema スキーマの名前を fruit に変更する。次のように実行する。
devkuma=# alter schema orange_schema rename to fruit;
ALTER SCHEMA
devkuma=#
スキーマ名が変更された。確認のため、もう一度 \dn コマンドを実行してみる。
devkuma=# \dn
스키마(schema) 목록
이름 | 소유주
----------+----------
fruit | orange
myschema | postgres
public | postgres
(3개 행)
devkuma=#
orange_schema スキーマの名前が fruit に変更されていることを確認できる。
スキーマの所有者を変更する
次に、ALTER SCHEMA コマンドを使用してスキーマの所有者を変更する方法である。形式は次のとおりである。
ALTER SCHEMA name OWNER TO new_owner
スキーマ (name) の所有者を新しい所有者 (new_owner) に変更する。
スキーマの所有者を変更するには、コマンドを実行するロールがスーパーユーザーまたはスキーマ所有者であり、新しい所有者の直接または間接のメンバーで、スキーマが作成されているデータベースで CREATE 権限を持っている必要がある。
–
それでは実際に試してみる。psql メタコマンド \dn を実行して確認すると、現在の devkuma データベースには、デフォルトで作成される public 以外に 2 つのスキーマが作成されている。
devkuma=# \dn
스키마(schema) 목록
이름 | 소유주
----------+----------
fruit | orange
myschema | postgres
public | postgres
(3개 행)
devkuma=#
このうち fruit スキーマの所有者を kimkc ロールに変更する。次のように実行する。
devkuma=# alter schema fruit owner to kimkc;
오류: "kimkc" 롤(role) 없음
devkuma=#
上のようにロールが存在しない場合はエラーが発生するため、次のようにロールを 1 つ作成する。
devkuma=# create role kimkc with superuser login password '1234';
CREATE ROLE
devkuma=#
それでは次のように再度実行してみる。
devkuma=# alter schema fruit owner to kimkc;
ALTER SCHEMA
devkuma=#
スキーマの所有者が変更された。確認のため、もう一度 \dn コマンドを実行してみる。
devkuma=# \dn
스키마(schema) 목록
이름 | 소유주
----------+----------
fruit | kimkc
myschema | postgres
public | postgres
(3개 행)
devkuma=#
fruit スキーマの所有者が kimkc ロールに変更されていることを確認できる。
–
ここまで、ALTER SCHEMA コマンドを使用して作成済みのスキーマを変更する方法について説明した。