以前、user1という名前のPostgreSQLユーザー(PostgreSQL 9.4.9)を作成しました。
このユーザーを削除します。そのため、最初に、テーブル、シーケンス、関数、デフォルトの権限、所有権のすべての権限も取り消します。
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON SEQUENCES FROM user1;
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON TABLES FROM user1;
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON FUNCTIONS FROM user1;
REVOKE ALL ON ALL SEQUENCES IN SCHEMA public FROM user1;
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM user1;
REVOKE ALL ON ALL FUNCTIONS IN SCHEMA public FROM user1;
REASSIGN OWNED BY user1 TO postgres;
ただし、1つのオブジェクトが2つのデータベースでこのユーザーにリンクされたままのようです。
postgres=# DROP ROLE user1;
ERROR: role "user1" cannot be dropped because some objects depend on it
DETAIL: 1 object in database db1
1 object in database db2
それも関数のようです:
postgres=# \c db1
You are now connected to database "db1" as user "postgres".
db1=# DROP ROLE user1;
ERROR: role "user1" cannot be dropped because some objects depend on it
DETAIL: privileges for function text(boolean)
1 object in database db2
しかし、どのオブジェクトが所有されているのか、またはuser1に関連しているのかを特定できません。
私ならばpg_dump -s db1 | grep user1
、私は何も結果を得ることはありません!それはグローバルオブジェクトでしょうか?
欠落しているオブジェクトを特定するにはどうすればよいですか?
各データベース(db1およびdb2)でコマンドを実行しました。が所有するオブジェクトを削除するのではなくuser1
、このユーザーの権限を再割り当てまたは削除するだけです。