2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1

21.4. 刪除角色 #

由於角色可以擁有資料庫物件,並且可以擁有訪問其他物件的許可權,因此刪除角色通常不僅僅是執行一個簡單的 DROP ROLE 命令。角色擁有的任何物件必須先被刪除或重新分配給其他所有者;並且授予該角色的任何許可權都必須被撤銷。

可以使用 ALTER 命令逐個轉移物件的所有權,例如:

ALTER TABLE bobs_table OWNER TO alice;

或者,可以使用 REASSIGN OWNED 命令將待刪除角色擁有的所有物件的所有權重新分配給另一個角色。由於 REASSIGN OWNED 無法訪問其他資料庫中的物件,因此必須在包含該角色擁有的物件的每個資料庫中執行它。(請注意,第一個 REASSIGN OWNED 會更改待刪除角色擁有的任何跨資料庫共享物件(即資料庫或表空間)的所有權。)

一旦任何有價值的物件已轉移給新所有者,待刪除角色擁有的任何剩餘物件都可以使用 DROP OWNED 命令刪除。同樣,此命令無法訪問其他資料庫中的物件,因此必須在包含該角色擁有的物件的每個資料庫中執行它。此外,DROP OWNED 不會刪除整個資料庫或表空間,因此如果該角色擁有任何尚未轉移給新所有者的資料庫或表空間,則需要手動刪除它們。

DROP OWNED 還會處理刪除授予目標角色對其不擁有的物件的任何許可權。由於 REASSIGN OWNED 不處理此類物件,因此通常需要按此順序(先 REASSIGN OWNED,後 DROP OWNED!)執行這兩個命令,才能完全消除待刪除角色的依賴關係。

簡而言之,刪除曾用於擁有物件的角色的最通用方法是:

REASSIGN OWNED BY doomed_role TO successor_role;
DROP OWNED BY doomed_role;
-- repeat the above commands in each database of the cluster
DROP ROLE doomed_role;

當不是所有擁有的物件都要轉移給同一個繼承所有者時,最好手動處理例外情況,然後執行上述步驟進行清理。

如果嘗試在仍存在依賴物件時執行 DROP ROLE,它會發出訊息,指明哪些物件需要重新分配或刪除。

提交更正

如果您在文件中發現任何不正確、與您對特定功能的實際體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。