PostgreSQL | 스키마(Schema) | 스키마 삭제(DROP SCHEMA)

DROP SCHEMA 명령을 사용하여 생성된 스키마를 삭제하는 방법에 대해 알아보자.

스키마 삭제

DROP SCHEMA 명령을 사용하여 스키마를 삭제하는 방법에 대해 알아보자. 형식은 다음과 같다.

DROP SCHEMA [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

지정된 스키마 (name)을 제거한다. 스키마에 테이블과 같은 객체가 포함된 경우 CASCADE를 지정하면 객체를 포함하여 삭제한다. RESTRICT를 지정하면 삭제를 취소하게 된다. 기본값은 RESTRICT 이다.

스키마를 삭제하려면 명령을 수행하는 역할이 수퍼 유저 또는 스키마의 소유자여야 한다. 그리고 CASCADE를 지정하게 되면 한번에 삭제되는 객체의 소유자가 따로 있어도 객체는 삭제된다.

그러면 실제로 해보도록 하자. 일반 사용자 kimkc 역할 PostgreSQL의 devkuma 데이터베이스에 연결한다. psql 메타 명령 \dn을 실행하여 확인 해 보면 현재이 데이터베이스에는 kimkc 역할 소유자인 fruit 스키마가 작성되어 있다.

devkuma=# \dn
 스키마(schema) 목록
   이름   |  소유주
----------+----------
 fruit    | kimkc
 myschema | postgres
 public   | postgres
(3개 행)


devkuma=#

fruit 스키마를 삭제한다. 다음과 같이 실행한다.

devkuma=# drop schema fruit;
DROP SCHEMA
devkuma=#

스키마가 삭제되었다. 확인을 위해 다시 \dn 명령을 실행해 본다.

devkuma=# \dn
 스키마(schema) 목록
   이름   |  소유주
----------+----------
 myschema | postgres
 public   | postgres
(2개 행)


devkuma=#

fruit 스키마가 삭제된 것을 확인할 수 있다.

그럼 다시 kimkc 롤을 사용하여 apple 스키마를 만든다.

C:\Users\kimkc>psql -U kimkc -d devkuma
kimkc 사용자의 암호:
psql (12.2)
도움말을 보려면 "help"를 입력하십시오.

devkuma=# create schema apple;
CREATE SCHEMA
devkuma=#

kimkc 역할과 다른 수퍼 유저의 롤을 사용하여 apple 스키마에 테이블을 만든다.

C:\Users\kimkc>psql -U postgres -d devkuma
postgres 사용자의 암호:
psql (12.2)
도움말을 보려면 "help"를 입력하십시오.

devkuma=# create table apple.blog (id integer);
CREATE TABLE
devkuma=#

이제 apple 스키마에는 kimkc 역할과 다른 역할이 소유자의 테이블이 생성하였다.

devkuma=# \dt apple.*;
      릴레이션(relation) 목록
 스키마 | 이름 |  종류  |  소유주
--------+------+--------+----------
 apple  | blog | 테이블 | postgres
(1개 행)


devkuma=#

그러면 kimkc 역할을 사용하여 fruit 스키마를 제거하기 위해 다음과 같이 실행한다.

C:\Users\kimkc>psql -U kimkc -d devkuma
kimkc 사용자의 암호:
psql (12.2)
도움말을 보려면 "help"를 입력하십시오.

devkuma=# drop schema apple;
오류:  기타 다른 개체들이 이 개체에 의존하고 있어, apple 스키마 삭제할 수 없음
상세정보:  apple.blog 테이블 의존대상: apple 스키마
힌트:  이 개체와 관계된 모든 개체들을 함께 삭제하려면 DROP ... CASCADE 명령을 사용하십시오
devkuma=#

그러자 “오류: 기타 다른 개체들이 이 개체에 의존하고 있어, apple 스키마 삭제할 수 없음“라는 오류 메시지가 표시되고 스키마를 삭제 할 수 없다.

명시적으로 CASCADE를 지정하지 않으면 RESTRICT를 지정된 것과 같기에 스키마에서의 객체의 존재하기에 삭제가 되지 않는다.

이번에는 CASCADE를 지정하여 apple 스키마를 삭제한다. 다음과 같이 실행한다.

devkuma=# drop schema apple cascade;
알림:  apple.blog 테이블 개체가 덩달아 삭제됨
DROP SCHEMA
devkuma=#

apple 스키마가 삭제되었다. apple 스키마에 다른 소유자가 만든 테이블이 포함되어 있었지만 동시에 삭제되었다.

여기까지 DROP SCHEMA 명령을 사용하여 생성된 스키마를 제거하는 방법을 알아 보았다.