Несколько раз назад я создал пользователя PostgreSQL с именем user1 (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;
Однако кажется, что один объект остается связанным с этим пользователем в 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
удалять объекты, принадлежащие , просто хочу переназначить или удалить гранты для этого пользователя.
источник
Вам необходимо сначала подключиться к базе данных. В вашем случае это было бы
а также
Затем попробуйте снова выполнить операторы REVOKE ALL PRIVILEGES и REASSIGN OWNED / DROP OWNED.
источник