web-dev-qa-db-ja.com

デフォルトの権限が原因でPostgreSQLのドロップロールが失敗する

以前は同じ名前「xyz」のスキーマの所有者であったロール「xyz」を削除しようとしています。以下のようにスキーマの所有権を変更し、万が一の場合に備えて再割り当てされた所有権を実行しました(ただし、すべてのテーブルはスーパーユーザー権限を持つ別のユーザーによって作成されました)。だから私はこれらすべてを実行します:

alter schema xyz owner to postgres;
reassign owned by xyz to postgres;
alter default privileges in schema seeds revoke all on tables from xyz cascade;
alter default privileges in schema seeds revoke all on sequences from xyz cascade;
alter default privileges in schema seeds revoke all on functions from xyz cascade;

それでもエラーが発生します:

drop role xyz;
ERROR:  role "xyz" cannot be dropped because some objects depend on it
DETAIL:  owner of default privileges on new relations belonging to role xyz in schema xyz

また参考までに:

postgres=# \du rsi
List of roles
Role name |   Attributes   | Member of   
-----------+----------------+-----------
rsi       | No inheritance | {}

何が足りないのですか?どんな助けでもいただければ幸いです!ありがとう!

25

PostgreSQLドキュメントALTER DEFAULT PRIVILEGES、メモセクションから取得:

デフォルトの特権が変更されたロールを削除する場合は、デフォルトの特権の変更を元に戻すか、DROP OWNEDBYを使用してロールのデフォルトの特権エントリを削除する必要があります。

この場合のDROP OWNED BYに関するドキュメントからの別の 言及に値する

DROP OWNEDは現在のデータベース内のオブジェクトにのみ影響するため、通常、削除するロールが所有するオブジェクトを含む各データベースでこのコマンドを実行する必要があります。

したがって、マイレージは異なる場合があります。つまり、より多くのDBでステートメントを発行する必要がある場合があります。

質問で述べたのと同じメッセージを受け取ったので、DROP OWNED BYステートメントを試してみましたが、うまくいきました。お役に立てれば!

29
Dr1Ku

最初の実行コマンド:

DROP OWNED BY xyz;

その後:

DROP ROLE xyz;

Drop Owned By に関するPostgreSQLのドキュメントをお読みください。

3
Shrinivas