Я пытаюсь эффективно drop role
из экземпляра postgres и столкнулся с некоторыми проблемами. Я ищу какой-нибудь SQL для drop role
, чтобы перестать читать сообщения об ошибках и не делать это вручную.
В настройке, в которой я работаю, каждая роль получает свою собственную базу данных с тем же именем:
CREATE ROLE alpha_user;
CREATE DATABASE alpha_user;
ALTER DATABASE alpha_user OWNER TO alpha_user;
Пользователи часто предоставляют доступ к схемам в своей базе данных другим пользователям:
-- alpha_user logs in to the alpha_user database
GRANT USAGE ON SCHEMA myschema TO beta_user;
Когда я пытаюсь удалить beta_user
, это происходит:
-- log in as superuser
DROP ROLE beta_user;
-- ERROR: role "beta_user" cannot be dropped because some objects depend on it
-- DETAIL: N objects in database alpha_user
Я могу подключиться к базе данных alpha_user
и удалить OWNED BY
, но это неэффективно:
-- log in as superuser
\c alpha_user;
DROP OWNED BY beta_user CASCADE;
DROP beta_user;
-- success
Пользователи могут предоставлять доступ к любому количеству баз данных, а пользователей много. Существует ли оператор (или ряд операторов), который суперпользователь может выполнить до DROP OWNED BY
для пользователя во всех базах данных, к которым пользователю был предоставлен доступ?