Kabul edilen yanıt, SAHİP OLAN veya DROP TARAFINDAN BIRAKILAN DEĞİŞTİRME girişiminde bulunduğumda hatalarla sonuçlandı. Aşağıdakiler benim için çalıştı:
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;
Kullanıcı diğer şemalarda ayrıcalıklara sahip olabilir, bu durumda uygun REVOKE satırını "genel" yerine doğru şema ile değiştirerek çalıştırmanız gerekecektir. Bir kullanıcı için tüm şemaları ve ayrıcalık türlerini göstermek için, bu sorguyu yapmak için \ dp komutunu düzenledim:
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%';
Hangi ayrıcalık türlerinin TABLOLAR, SEKANSLAR veya FONKSİYONLAR'da iptal etmeye karşılık geldiğinden emin değilim, ancak hepsinin üçünden birinin altında olduğunu düşünüyorum.
CREATE TABLE foo(bar SERIAL); ALTER TABLE foo OWNER TO postgres; CREATE USER testuser; GRANT ALL ON foo TO testuser; DROP USER testuserhata mesajları verdi:ERROR: role "testuser" cannot be dropped because some objects depend on it DETAIL: access to table foo. Ancak,DROP OWNED BY testuserhile yaptı, görünüşe göre Postgres hibeleri atılabilir nesneler olarak görüyor.