ロールを削除する(DROP ROLE)
PostgreSQL では作成済みのロールを削除するのに DROP ROLE コマンドを使います。ここでは PostgreSQL でロールを削除する方法について解説します。
(Last modified: )
ロールを削除する
DROP ROLE コマンドを使ってロールを削除する方法です。次の書式を使用します。
DROP ROLE [ IF EXISTS ] name [, ...]
ロール( name )を削除します。ロールを削除する前に、ロールが所有するデータベースオブジェクトを削除するか所有者を変更しておく必要があります。またデータベースオブジェクトに対する権限をロールが持っている場合は、権限もすべて削除しておく必要があります。
ロールを削除する場合、対象のロールがスーパーユーザーの場合はコマンドを実行するロールがスーパーユーザーである必要があります。またそれ以外のロールを削除するにはコマンドを実行するロールが CREATEROLE 権限を持っている必要があります。
-- --
それでは実際に試してみます。現在 3 つのロールが作成されています。
\du
この中の saru ロールを削除します。次のように実行してください。
drop role saru;
saru ロールが削除されました。確認のためにあらためて \du コマンドを実行します。
saru ロールが削除されていることが確認できました。
削除するロールがデータベースオブジェクトの所有者だった場合
削除しようとしているロールが、スキーマやテーブルなどデータベースオブジェクトの所有者だった場合、ロールを削除する前にオブジェクトを削除するか所有権を他のロールに変更しておく必要があります。またテーブルなどに対する権限をロールに追加していた場合、削除する前に権限を削除しておく必要があります。
対象のロールが所有するオブジェクトを一つ一つ削除してもいいですし、指定のロールが所有するオブジェクトをまとめて削除するには「指定のロールがデータベースの中で所有するオブジェクトをまとめて削除する(DROP OWNED)」を参照されてください。また指定のロールが所有するオブジェクトの所有権を変更するばあいは「指定のロールが所有するオブジェクトの所有権を別のロールに変更する(REASSIGN OWNED)」を参照されてください。
-- --
それでは実際に試してみます。今回削除する予定の momo ロールは、 mydb データベースの中の public スキーマの中に shoplist テーブルを所有しています。
\dt
この状態で momo ロールを削除してみます。次のように実行してください。
drop role momo;
ERROR: 他のオブジェクトが依存していますのでロール"momo"を削除できません とエラーが表示されてロールの削除に失敗しました。何が原因でロールの削除に失敗したのかが合わせて表示されます。
それでは原因となった shoplist テーブルを削除します。
drop table shoplist;
shoplist テーブルが削除されました。これで momo ロールが所有するデータベースオブジェクトはありません。ではあらためて momo ロールを削除するため次のように実行してください。
drop role momo;
momo ロールが削除されました。
-- --
DROP ROLE コマンドを使ってロールを削除する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。