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;
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;
関連:
私のために働いたのは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つで十分です。
Ryanにすべての権限を付与しても役に立たないでしょう。彼がDBの所有者である可能性が高いです。他の誰かにそれを所有させる必要があります:
REASSIGN OWNED BY ryan TO postgres;
mydatabaseが不要になった場合を除き、データベースを削除するだけです(これを行う前に本当に必要ないことを確認してください):
DROP DATABASE mydatabase;