Принятый ответ привел к ошибкам при попытке REASSIGN OWNED BY или DROP OWNED BY. У меня сработало следующее:
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM username;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM username;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM username;
DROP USER username;
Пользователь может иметь привилегии в других схемах, и в этом случае вам нужно будет запустить соответствующую строку REVOKE, заменив «public» на правильную схему. Чтобы показать все схемы и типы привилегий для пользователя, я отредактировал команду \ dp, чтобы сделать этот запрос:
SELECT
n.nspname as "Schema",
CASE c.relkind
WHEN 'r' THEN 'table'
WHEN 'v' THEN 'view'
WHEN 'm' THEN 'materialized view'
WHEN 'S' THEN 'sequence'
WHEN 'f' THEN 'foreign table'
END as "Type"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE pg_catalog.array_to_string(c.relacl, E'\n') LIKE '%username%';
Я не уверен, какие типы привилегий соответствуют аннулированию для ТАБЛИЦ, ПОСЛЕДОВАТЕЛЬНОСТЕЙ или ФУНКЦИЙ, но я думаю, что все они подпадают под одну из трех.
CREATE TABLE foo(bar SERIAL); ALTER TABLE foo OWNER TO postgres; CREATE USER testuser; GRANT ALL ON foo TO testuser; DROP USER testuser
дали сообщения об ошибках:ERROR: role "testuser" cannot be dropped because some objects depend on it DETAIL: access to table foo
. ОднакоDROP OWNED BY testuser
свое дело сделал, видимо, Постгрес считает гранты удаляемыми объектами.