ロールを削除する(DROP ROLE)

PostgreSQL では作成済みのロールを削除するのに DROP ROLE コマンドを使います。ここでは PostgreSQL でロールを削除する方法について解説します。

(Last modified: )

ロールを削除する

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

DROP ROLE [ IF EXISTS ] name [, ...]

ロール( name )を削除します。ロールを削除する前に、ロールが所有するデータベースオブジェクトを削除するか所有者を変更しておく必要があります。またデータベースオブジェクトに対する権限をロールが持っている場合は、権限もすべて削除しておく必要があります。

ロールを削除する場合、対象のロールがスーパーユーザーの場合はコマンドを実行するロールがスーパーユーザーである必要があります。またそれ以外のロールを削除するにはコマンドを実行するロールが CREATEROLE 権限を持っている必要があります。

-- --

それでは実際に試してみます。現在 3 つのロールが作成されています。

\du

ロールを削除する(1)

この中の saru ロールを削除します。次のように実行してください。

drop role saru;

ロールを削除する(2)

saru ロールが削除されました。確認のためにあらためて \du コマンドを実行します。

ロールを削除する(3)

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

削除するロールがデータベースオブジェクトの所有者だった場合

削除しようとしているロールが、スキーマやテーブルなどデータベースオブジェクトの所有者だった場合、ロールを削除する前にオブジェクトを削除するか所有権を他のロールに変更しておく必要があります。またテーブルなどに対する権限をロールに追加していた場合、削除する前に権限を削除しておく必要があります。

対象のロールが所有するオブジェクトを一つ一つ削除してもいいですし、指定のロールが所有するオブジェクトをまとめて削除するには「指定のロールがデータベースの中で所有するオブジェクトをまとめて削除する(DROP OWNED)」を参照されてください。また指定のロールが所有するオブジェクトの所有権を変更するばあいは「指定のロールが所有するオブジェクトの所有権を別のロールに変更する(REASSIGN OWNED)」を参照されてください。

-- --

それでは実際に試してみます。今回削除する予定の momo ロールは、 mydb データベースの中の public スキーマの中に shoplist テーブルを所有しています。

\dt

削除するロールがデータベースオブジェクトの所有者だった場合(1)

この状態で momo ロールを削除してみます。次のように実行してください。

drop role momo;

削除するロールがデータベースオブジェクトの所有者だった場合(2)

ERROR: 他のオブジェクトが依存していますのでロール"momo"を削除できません とエラーが表示されてロールの削除に失敗しました。何が原因でロールの削除に失敗したのかが合わせて表示されます。

それでは原因となった shoplist テーブルを削除します。

drop table shoplist;

削除するロールがデータベースオブジェクトの所有者だった場合(3)

shoplist テーブルが削除されました。これで momo ロールが所有するデータベースオブジェクトはありません。ではあらためて momo ロールを削除するため次のように実行してください。

drop role momo;

削除するロールがデータベースオブジェクトの所有者だった場合(3)

momo ロールが削除されました。

-- --

DROP ROLE コマンドを使ってロールを削除する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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