web-dev-qa-db-ja.com

PostgreSQLロールを削除できません。エラー:「一部のオブジェクトは依存しているため、ドロップできません」

PostgreSQLユーザーを削除しようとしました:

DROP USER ryan;

私はこのエラーを受け取りました:

Error in query:
ERROR: role "ryan" cannot be dropped because some objects depend on it
DETAIL: privileges for database mydatabase

これらのスレッドから解決策を探しました。

それでも同じエラーが発生します。

これは、ユーザー「ryan」にすべての権限を付与した後に発生します。

GRANT ALL PRIVILEGES ON DATABASE mydatabase ON SCHEMA public TO ryan;
10
notalentgeek

DROP OWNED(文言からはあまり明らかではない)ですべての特権を取り除きます。 マニュアル:

[...]現在のデータベース内のオブジェクトおよび共有オブジェクト(データベース、テーブルスペース)の特定のロールに付与された特権も取り消されます。

したがって、役割を削除するための信頼できるコマンドシーケンスは次のとおりです。

REASSIGN OWNED BY ryan TO postgres;  -- or some other trusted role
DROP OWNED BY ryan;
-- repeat in ALL databases where the role owns anything or has any privileges!

DROP USER ryan;

関連:

19

私のために働いたのは1)データベースへの接続でした

\c mydatabase

2)所有権の再割り当て

REASSIGN OWNED BY ryan TO <newuser>;

または/および単にオブジェクトを削除する

DROP OWNED BY ryan;

3)取り消し特権の実行

REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM ryan;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM ryan;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM ryan;

4)ユーザーの削除

DROP USER ryan;

PS:ステップ2と3の両方を実行する必要はないかもしれませんが、通常は2つのステップのうちの1つで十分です。

0
Samuel Anyaele

Ryanにすべての権限を付与しても役に立たないでしょう。彼がDBの所有者である可能性が高いです。他の誰かにそれを所有させる必要があります:

REASSIGN OWNED BY ryan TO postgres;

mydatabaseが不要になった場合を除き、データベースを削除するだけです(これを行う前に本当に必要ないことを確認してください):

DROP DATABASE mydatabase;
0
A Hettinger