PostgreSQL ロールを削除する

PostgreSQL ロールを削除する

PostgreSQLで、ロールを削除する手順を記述してます。「DROP ROLE」で削除したいロール名(ユーザー名)を指定することで可能です。ロールがスキーマのオーナーだったりする場合は削除できずエラーとなります。

環境

  • OS CentOS Stream release 9
  • PostgreSQL 15.1
  • pgadmin4 6.16

ロールを削除

ロールを削除する場合は、「DROP ROLE」を使用します。

DROP ROLE ロール名

実際に、以下の「foo」というロールを削除してみます。

削除します。

DROP ROLE foo

ユーザーが削除されたか、確認してみます。

select usename from pg_user

実行結果

削除されていることが確認できます。

エラー

「他のオブジェクトが依存していますのでロール”xxx”を削除できません」が発生する場合は、スキーマのオーナーだったり「USAGE」権限や「CREATE」権限が付与されている場合があります。

postgres=# drop role sampleuser;

ERROR:  他のオブジェクトが依存していますのでロール"sampleuser"を削除できません
DETAIL:  スキーマpublicの権限
データベースsampleの権限
テーブルfooの権限
テーブルtesttblの権限
テーブルsampleの権限
テーブルsample2の権限
テーブルtestの権限
テーブルjson_testの権限
テーブルsampletblの権限
テーブルhogeの所有者

スキーマの権限の確認は「\dt」で可能です。

sample=# \dt

          List of relations
 Schema |   Name    | Type  |   Owner
--------+-----------+-------+------------
 public | foo       | table | pgadmin
 public | hoge      | table | sampleuser
 public | json_test | table | pgadmin
 public | sample    | table | pgadmin
 public | sample2   | table | pgadmin
 public | sampletbl | table | pgadmin
 public | test      | table | pgadmin
 public | testtbl   | table | pgadmin
(8 rows)

この場合は、テーブルを削除するか、全てのテーブルのオーナーを別のロールに変更して、持っている権限を「REVOKE」で削除することでユーザーをできるようになります。

sample=# reassign owned by sampleuser to pgadmin;
REASSIGN OWNED

sample=# REVOKE ALL ON ALL TABLES IN SCHEMA public FROM sampleuser;
REVOKE

sample=# REVOKE create on database sample FROM sampleuser;
REVOKE

sample=# REVOKE USAGE ON SCHEMA public FROM sampleuser;
REVOKE

sample=# REVOKE CREATE ON SCHEMA public FROM sampleuser;
REVOKE

pgadminから削除

pgadminから削除する場合は、対象のロールを右クリックして「削除」を選択します。

アラートが表示されるので「はい」をクリックすると削除されます。