Câu trả lời được chấp nhận đã dẫn đến lỗi cho tôi khi cố gắng ĐĂNG KÝ LẠI ĐƯỢC SỞ HỮU BỞI hoặc DROP SỞ HỮU BỞI. Những điều sau đây đã làm việc cho tôi:
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;
Người dùng có thể có đặc quyền trong các lược đồ khác, trong trường hợp đó, bạn sẽ phải chạy dòng REVOKE thích hợp với "công khai" được thay thế bằng lược đồ chính xác. Để hiển thị tất cả các lược đồ và loại đặc quyền cho người dùng, tôi đã chỉnh sửa lệnh \ dp để thực hiện truy vấn này:
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%';
Tôi không chắc loại đặc quyền nào tương ứng với việc thu hồi trên TABLES, SEQUENCES hoặc FUNCTIONS, nhưng tôi nghĩ tất cả chúng đều thuộc một trong ba loại.
CREATE TABLE foo(bar SERIAL); ALTER TABLE foo OWNER TO postgres; CREATE USER testuser; GRANT ALL ON foo TO testuser; DROP USER testuser
đã đưa ra thông báo lỗi:ERROR: role "testuser" cannot be dropped because some objects depend on it DETAIL: access to table foo
. Tuy nhiên,DROP OWNED BY testuser
đã xảy ra mánh khóe, dường như Postgres coi các khoản tài trợ là những vật thể có thể thả xuống.