スキーマを削除する(DROP SCHEMA)
PostgreSQL では作成済みのスキーマを削除する場合に DROP SCHEMA コマンドを使用します。ここでは PostgreSQL で作成済みのスキーマを削除する方法について解説します。
(Last modified: )
目次
スキーマを削除する
DROP SCHEMA コマンドを使ってスキーマを削除する方法です。次の書式を使用します。
DROP SCHEMA [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
指定したスキーマ( name )を削除します。スキーマにテーブルなどのオブジェクトが含まれていた場合、 CASCADE を指定した場合はオブジェクトも含めて削除します。 RESTRICT を指定した場合は削除を中止します。デフォルトの値は RESTRICT です。
スキーマを削除するにはコマンドを実行するロールがスーパーユーザーか、スキーマの所有者である必要があります。なお CASCADE を指定した場合、一緒に削除されるオブジェクトの所有者が誰であってもオブジェクトは削除されます。
-- --
それでは実際に試してみます。 一般ユーザーの momo ロールで PostgreSQL の mydb データベースに接続します。 psql メタコマンドの \dn を実行して確認してみると、現在このデータベースには momo ロールが所有者の fruit スキーマが作成されています。
\dn
fruit スキーマを削除します。次のように実行してください。
drop schema fruit;
スキーマが削除されました。確認のためにあらためて \dn コマンドを実行してみます。
fruit スキーマが削除されていることが確認できました。
-- --
それではあらためて momo ロールを使って momo スキーマを作成します。
create schema momo;
momo ロールとは別のスーパーユーザーのロールを使って、 momo スキーマの中にテーブルを作成します。
create table momo.blog (id integer);
これで momo スキーマの中には momo ロールとは別のロールが所有者のテーブルが作成されました。
それでは momo ロールを使って fruit スキーマを削除します。次のように実行してください。
drop schema momo;
すると ERROR: 他のオブジェクトが依存しているためスキーマmomoを削除できません というエラーが表示されてスキーマを削除することができませんでした。
明示的に CASCADE を指定しない場合は RESTRICT を指定したのと同じ扱いとなるため、スキーマ内にオブジェクトが作成されている場合は削除を中心します。
今度は CASCADE を指定し momo ロールを使って fruit スキーマを削除します。次のように実行してください。
drop schema momo cascade;
momo スキーマが削除されました。 momo スキーマの中には別の所有者が作成したテーブルが含まれていましたが同時に削除されました。
-- --
DROP SCHEMA コマンドを使って作成済みのスキーマを削除する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。