본문 바로가기
다른 DBMS/PostgresDB

오류: 기타 다른 개체들이 이 롤에 의존하고 있어, "유저명" 롤을 삭제할 수 없음

by 취미툰 2024. 5. 29.
반응형

유저삭제를 위해 명령어를 날렸는데 에러 발생하였습니다.

 

postgres=# drop role 유저명;

오류:  기타 다른 개체들이 이 롤에 의존하고 있어, "유저명" 롤을 삭제할 수 없음
상세정보:  1 개체(데이터베이스: db명 데이터베이스)

https://postgresql.kr/docs/12/sql-droprole.html

 

DROP ROLE

DROP ROLE DROP ROLE — remove a database role 요약 DROP ROLE [ IF EXISTS ] name [, ...] Description DROP ROLE removes the specified role(s). To drop a superuser role, you must be a superuser yourself; to drop non-superuser roles, you must have CREATEROL

postgresql.kr

 

위의 pg 문서에는 이렇게 나옵니다.

A role cannot be removed if it is still referenced in any database of the cluster; an error will be raised if so. Before dropping the role, you must drop all the objects it owns (or reassign their ownership) and revoke any privileges the role has been granted on other objects. The REASSIGN OWNED and DROP OWNED commands can be useful for this purpose; see 21.4절 for more discussion.

클러스터의 데이터베이스에서 여전히 참조되는 역할은 제거할 수 없으며, 제거할 경우 오류가 발생합니다. 역할을 삭제하기 전에 해당 역할이 소유한 모든 개체를 삭제(또는 해당 개체의 소유권을 재할당)하고 다른 개체에 대해 해당 역할이 부여된 모든 권한을 취소해야 합니다. 이를 위해서는 소유권 재할당 및 소유권 드롭 명령이 유용합니다.

 

 

https://www.postgresql.org/docs/current/sql-drop-owned.html

 

DROP OWNED

DROP OWNED DROP OWNED — remove database objects owned by a database role Synopsis DROP OWNED BY { name | …

www.postgresql.org

 

DROP OWNED is often used to prepare for the removal of one or more roles. Because DROP OWNED only affects the objects in the current database, it is usually necessary to execute this command in each database that contains objects owned by a role that is to be removed.

 

DROP OWNEND는 종종 하나 이상의 역할 제거를 준비하는 데 사용됩니다. DROP OWNEND는 현재 데이터베이스의 개체에만 영향을 미치기 때문에 제거할 역할이 소유한 개체를 포함하는 각 데이터베이스에서 이 명령을 실행해야 합니다.

 

원인 

해당 데이터베이스에 참조되는 부분이 있어서 삭제가 불가능

 

해결

해당 데이터베이스로 접속 후에 DROP OWNED BY 유저명 수행하여 의존되는 부분 제거

 

postgres=# \c db명
접속정보: 데이터베이스="db명", 사용자="postgres".

dbdmrd=# drop owned by 유저명;
DROP OWNED
dbdmrd=# drop role 유저명;
DROP ROLE

 

끝.

반응형

댓글