Роль отгрузки 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
Также FYI:
postgres=# \du rsi
List of roles
Role name | Attributes | Member of
-----------+----------------+-----------
rsi | No inheritance | {}
Что мне не хватает? Любая помощь будет оценена! Спасибо!!
Ответы
Ответ 1
Взято из документации PostgreSQL в ALTER DEFAULT PRIVILEGES
, раздел "Примечания":
Если вы хотите отбросить роль, для которой были изменены привилегии по умолчанию, необходимо отменить изменения в своих привилегиях по умолчанию или использовать DROP OWNED BY, чтобы избавиться от записи привилегий по умолчанию для этой роли.
Другим достойным упоминанием в документации по DROP OWNED BY
в этом случае также является
Поскольку DROP OWNED влияет только на объекты в текущей базе данных, обычно необходимо выполнить эту команду в каждой базе данных, содержащей объекты, принадлежащие роли, которая должна быть удалена.
Следовательно, ваш пробег может отличаться, что означает, что вам, возможно, придется выдать отчет в большее количество БД.
Получив те же сообщения, что и в вопросе, я опробовал инструкцию DROP OWNED BY
, и она сработала. Надеюсь, это поможет!
Ответ 2
Команда первого запуска:
DROP OWNED BY xyz;
затем:
DROP ROLE xyz;
Прочтите документацию PostgreSQL, касающуюся Drop Owned By.