スキーマを削除する(DROP SCHEMA)

広告
eyecatch

DROP SCHEMA コマンドを使って作成済みのスキーマを削除する方法について解説します。

スキーマを削除する

DROP SCHEMA コマンドを使ってスキーマを削除する方法です。次の書式を使用します。

DROP SCHEMA [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

指定したスキーマ( name )を削除します。スキーマにテーブルなどのオブジェクトが含まれていた場合、 CASCADE を指定した場合はオブジェクトも含めて削除します。 RESTRICT を指定した場合は削除を中止します。デフォルトの値は RESTRICT です。

スキーマを削除するにはコマンドを実行するロールがスーパーユーザーか、スキーマの所有者である必要があります。なお CASCADE を指定した場合、一緒に削除されるオブジェクトの所有者が誰であってもオブジェクトは削除されます。

-- --

それでは実際に試してみます。 一般ユーザーの momo ロールで PostgreSQL の mydb データベースに接続します。 psql メタコマンドの ¥dn を実行して確認してみると、現在このデータベースには momo ロールが所有者の fruit スキーマが作成されています。

¥dn

スキーマを削除する(1)

fruit スキーマを削除します。次のように実行してください。

drop schema fruit;

スキーマを削除する(2)

スキーマが削除されました。確認のためにあらためて ¥dn コマンドを実行してみます。

スキーマを削除する(3)

fruit スキーマが削除されていることが確認できました。

-- --

それではあらためて momo ロールを使って momo スキーマを作成します。

create schema momo;

スキーマを削除する(4)

momo ロールとは別のスーパーユーザーのロールを使って、 momo スキーマの中にテーブルを作成します。

create table momo.blog (id integer);

スキーマを削除する(5)

これで momo スキーマの中には momo ロールとは別のロールが所有者のテーブルが作成されました。

スキーマを削除する(6)

それでは momo ロールを使って fruit スキーマを削除します。次のように実行してください。

drop schema momo;

スキーマを削除する(7)

すると ERROR: 他のオブジェクトが依存しているためスキーマmomoを削除できません というエラーが表示されてスキーマを削除することができませんでした。

明示的に CASCADE を指定しない場合は RESTRICT を指定したのと同じ扱いとなるため、スキーマ内にオブジェクトが作成されている場合は削除を中心します。

今度は CASCADE を指定し momo ロールを使って fruit スキーマを削除します。次のように実行してください。

drop schema momo cascade;

スキーマを削除する(8)

momo スキーマが削除されました。 momo スキーマの中には別の所有者が作成したテーブルが含まれていましたが同時に削除されました。

-- --

DROP SCHEMA コマンドを使って作成済みのスキーマを削除する方法について解説しました。

PostgreSQLの使い方の他の記事を見てみる

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。