DROP 문

DROP 문 (DROP Statement)

DROP 문은 앞서 CREATE 명령으로 추가했던 카탈로그 항목(catalog entry)을 제거하는 명령이에요. 만들었던 테이블, 뷰, 함수, 인덱스 같은 것들을 삭제할 때 써요.

출처: 문서

본문

DROP 문은 앞서 CREATE 명령으로 추가한 카탈로그 항목을 제거해요.

예시 (Examples)

이름이 tbl인 테이블 삭제:

DROP TABLE tbl;

이름이 view1인 뷰 삭제 — 뷰가 없어도 에러를 던지지 않게 하려면:

DROP VIEW IF EXISTS view1;

함수 fn 삭제:

DROP FUNCTION fn;

인덱스 idx 삭제:

DROP INDEX idx;

스키마 sch 삭제:

DROP SCHEMA sch;

시퀀스 seq 삭제:

DROP SEQUENCE seq;

매크로 mcr 삭제:

DROP MACRO mcr;

매크로 테이블 mt 삭제:

DROP MACRO TABLE mt; -- the `TABLE` is optional since v1.4.0

타입 typ 삭제:

DROP TYPE typ;

문법 (Syntax)

삭제 객체의 의존성 (Dependencies of Dropped Objects)

DuckDB는 일부 객체 타입에 대해 제한적인 의존성 추적(dependency tracking)을 수행해요. 기본적으로, 또는 RESTRICT 절을 주면, 그 객체에 의존하는 다른 객체가 있으면 그 항목을 삭제하지 않아요. CASCADE 절을 주면 그 객체에 의존하는 모든 객체도 함께 삭제돼요.

CREATE SCHEMA myschema;
CREATE TABLE myschema.t1 (i INTEGER);
DROP SCHEMA myschema;
Dependency Error:
Cannot drop entry "myschema" because there are entries that depend on it.
table "t1" depends on schema "myschema".
Use DROP...CASCADE to drop all dependents.

CASCADE 수식어는 myschema와 myschema.t1을 모두 삭제해요:

CREATE SCHEMA myschema;
CREATE TABLE myschema.t1 (i INTEGER);
DROP SCHEMA myschema CASCADE;

다음 의존성이 추적되기 때문에, 사용자가 CASCADE 수식어 없이 해당 의존 객체를 삭제하려 하면 에러가 발생해요.

의존하는 객체 타입 의존되는 객체 타입
SCHEMA FUNCTION
SCHEMA MACRO TABLE
SCHEMA MACRO
SCHEMA SCHEMA
SCHEMA SEQUENCE
SCHEMA TABLE
SCHEMA TYPE
SCHEMA VIEW

제한 사항 (Limitations)

뷰에 대한 의존성 (Dependencies on Views)

현재 뷰에 대해서는 의존성이 추적되지 않아요. 예를 들어 테이블을 참조하는 뷰를 만들고 그 테이블을 삭제하면, 뷰는 잘못된 상태가 돼요:

CREATE TABLE tbl (i INTEGER);
CREATE VIEW view1 AS
    SELECT i FROM tbl;
DROP TABLE tbl RESTRICT;
SELECT * FROM view1;

이 경우 다음 에러 메시지가 반환돼요:

Catalog Error:
Table with name tbl does not exist!

디스크 공간 회수 제한 (Limitations on Reclaiming Disk Space)

DROP TABLE을 실행하면 테이블이 사용하던 메모리는 해제돼요. 하지만 디스크 공간은 항상 줄지는 않아요. 디스크 공간이 줄지 않더라도, 여유 블록은 free로 표시돼요. 예를 들어 2 GB 파일이 있고 1 GB 테이블을 삭제했다면, 파일은 여전히 2 GB일 수 있지만 안에는 1 GB의 여유 블록이 있어야 해요. 이를 확인하려면 다음 PRAGMA를 실행해서 출력의 free_blocks 개수를 확인하면 돼요:

PRAGMA database_size;

테이블 삭제 후 공간을 회수하는 방법은 "공간 회수" 페이지를 참고해요.

더 알아보기 (Learn more)