Jawaban yang diterima mengakibatkan kesalahan bagi saya saat mencoba REASSIGN OWNED BY atau DROP OWNED BY. Yang berikut berhasil untuk saya:
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;
Pengguna mungkin memiliki hak istimewa di skema lain, dalam hal ini Anda harus menjalankan baris REVOKE yang sesuai dengan "publik" diganti dengan skema yang benar. Untuk menampilkan semua skema dan jenis hak istimewa untuk pengguna, saya mengedit perintah \ dp untuk membuat kueri ini:
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%';
Saya tidak yakin jenis hak istimewa mana yang sesuai dengan pencabutan di TABEL, URUTAN, atau FUNGSI, tapi menurut saya semuanya termasuk dalam salah satu dari tiga.
CREATE TABLE foo(bar SERIAL); ALTER TABLE foo OWNER TO postgres; CREATE USER testuser; GRANT ALL ON foo TO testuser; DROP USER testusermemberikan pesan kesalahan:ERROR: role "testuser" cannot be dropped because some objects depend on it DETAIL: access to table foo. Namun, setelahDROP OWNED BY testusermelakukan triknya, ternyata Postgres menganggap hibah sebagai objek yang bisa dijatuhkan.