指定のロールがデータベースの中で所有するオブジェクトをまとめて削除する(DROP OWNED)

PostgreSQL の環境で DROP OWNED コマンドを使って指定したロールが所有するデータベースオブジェクトをまとめて削除する方法について解説します。ロールを削除する前にロールが所有するオブジェクトを削除しておきたい場合などに使われます。

(Last modified: )

指定のロールが所有するオブジェクトを削除

DROP OWNED コマンドを使うと指定したロールがデータベース内に所有しているすべてのデータベースオブジェクトを削除します。次の書式を使います。

DROP OWNED BY name [, ...] [ CASCADE | RESTRICT ]

指定したロール( name )が所有するオブジェクトを削除します。また現在のデータベースで指定したロールに追加されている権限も併せて削除します。

また CASCADE を付けた場合には削除するオブジェクトに依存するオブジェクト、そしてそれらのオブジェクトに依存するすべてのオブジェクトを自動的に削除します。 RESTRICT を付けた場合には削除するオブジェクトに依存する他のデータベースがオブジェクトがあった場合には削除を中止します。明示的に指定しなかった場合は RESTRICT を付けたものとして扱われます。

-- --

それでは実際に試してみます。現在 mydb データベースには momo ロールが所有者の momo スキーマが作成されています。

\dn

指定のロールが所有するオブジェクトを削除(1)

また public スキーマの中には shoplist テーブルが作成されています。

\dt

指定のロールが所有するオブジェクトを削除(2)

また public スキーマの中の blog テーブルに対して momo ロールには SELECT の権限が追加されています。

\dp

指定のロールが所有するオブジェクトを削除(3)

それでは mydb データベース内で momo ロールが所有するオブジェクトを削除します。次のように実行してください。

drop owned by momo;

指定のロールが所有するオブジェクトを削除(4)

momo ロールが mydb データベース内で所有していたオブジェクトがまとめて削除されました。

-- --

それでは momo スキーマが削除されたかどうか確認してみます。

指定のロールが所有するオブジェクトを削除(5)

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

次に public スキーマの中に作成されていた shoplist テーブルが削除されたかどうかを確認してみます。

指定のロールが所有するオブジェクトを削除(6)

shoplist テーブルが削除されていることが確認できました。

最後に public スキーマの中の blog テーブルに対して momo ロールに追加されていた権限を確認してみます。

指定のロールが所有するオブジェクトを削除(7)

momo ロールに与えられていた blog テーブルに対する SELECT 権限が削除されていました。

-- --

DROP OWNED コマンドを使って指定したロールが所有しているデータベースオブジェクトをまとめて削除する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。