DROP TABLE - Amazon Redshift

DROP TABLE

데이터베이스에서 테이블을 제거합니다.

테이블을 제거하지 않고 여러 행으로 구성된 테이블을 비우려면 DELETE 또는 TRUNCATE 명령을 사용하십시오.

DROP TABLE은 대상 테이블에 존재하는 제약 조건을 제거합니다. 단 한 번의 DROP TABLE 명령으로 여러 테이블을 제거할 수 있습니다.

트랜잭션(BEGIN … END) 내에서 외부 테이블을 포함한 DROP TABLE을 실행할 수 없습니다. 버전 관리에 대한 자세한 내용은 직렬화 가능 격리 단원을 참조하십시오.

그룹에 DROP 권한이 부여된 예를 보려면 GRANT 를 참조하세요.

필수 권한

DROP TABLE에 필요한 권한은 다음과 같습니다.

  • 수퍼유저

  • DROP TABLE 권한이 있는 사용자

  • 스키마에 대한 USAGE 권한이 있는 테이블 소유자

구문

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

파라미터

IF EXISTS

지정된 테이블이 존재하지 않는 경우 오류 메시지와 함께 종료하는 대신, 명령이 아무 것도 변경하지 않고 테이블이 존재하지 않는다는 메시지를 반환함을 나타내는 절입니다.

이 절은 스크립트 작성 시 유용하므로, DROP TABLE이 존재하지 않는 테이블에 대해 실행되는 경우에는 스크립트가 실패하지 않습니다.

이름

삭제할 테이블의 이름입니다.

CASCADE

뷰와 같이, 테이블에 종속되는 객체를 자동으로 삭제함을 나타내는 절입니다.

보기, 테이블 같은 다른 데이터베이스 객체에 종속되지 않는 보기를 새로 만들려면 보기 정의에 WITH NO SCHEMA BINDING 절을 포함시키십시오. 자세한 내용은 CREATE VIEW 단원을 참조하십시오.

RESTRICT

테이블에 종속된 객체가 있는 경우 테이블을 삭제하지 않음을 나타내는 절입니다. 이 동작이 기본값입니다.

종속 항목이 없는 테이블 삭제

다음 예에서는 종속 항목이 없는, FEEDBACK이라는 테이블을 생성하고 삭제합니다.

create table feedback(a int); drop table feedback;

테이블의 열을 뷰 또는 다른 테이블에서 참조할 경우 Amazon Redshift는 다음과 같은 메시지를 표시합니다.

Invalid operation: cannot drop table feedback because other objects depend on it

두 테이블 동시 삭제

다음 명령 집합은 FEEDBACK 테이블과 BUYERS 테이블을 생성한 다음, 단일 명령으로 두 테이블을 모두 삭제합니다.

create table feedback(a int); create table buyers(a int); drop table feedback, buyers;

종속 항목이 있는 테이블 삭제

다음 절차에서는 CASCADE 스위치를 사용하여 FEEDBACK이라는 테이블을 삭제하는 방법을 보여줍니다.

먼저 CREATE TABLE 명령을 사용하여 FEEDBACK이라는 간단한 테이블을 만듭니다.

create table feedback(a int);

다음으로, CREATE VIEW 명령을 사용하여 테이블 FEEDBACK에 종속된 FEEDBACK_VIEW라는 뷰를 만듭니다.

create view feedback_view as select * from feedback;

다음 예에서는 테이블 FEEDBACK을 삭제하고 뷰 FEEDBACK_VIEW도 삭제합니다. FEEDBACK_VIEW가 테이블 FEEDBACK에 종속되기 때문입니다.

drop table feedback cascade;

테이블에 대한 종속 항목 보기

테이블에 대한 종속성을 반환하려면 다음 예시를 사용하세요. my_schemamy_table을 실제 스키마와 테이블로 바꾸세요.

SELECT dependent_ns.nspname as dependent_schema , dependent_view.relname as dependent_view , source_ns.nspname as source_schema , source_table.relname as source_table , pg_attribute.attname as column_name FROM pg_depend JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid AND pg_depend.refobjsubid = pg_attribute.attnum JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace WHERE source_ns.nspname = 'my_schema' AND source_table.relname = 'my_table' AND pg_attribute.attnum > 0 ORDER BY 1,2 LIMIT 10;

my_table과 종속성을 삭제하려면 다음 예시를 사용하세요. 이 예시는 삭제된 테이블에 대한 모든 종속성도 반환합니다.

DROP TABLE my_table CASCADE; SELECT dependent_ns.nspname as dependent_schema , dependent_view.relname as dependent_view , source_ns.nspname as source_schema , source_table.relname as source_table , pg_attribute.attname as column_name FROM pg_depend JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid AND pg_depend.refobjsubid = pg_attribute.attnum JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace WHERE source_ns.nspname = 'my_schema' AND source_table.relname = 'my_table' AND pg_attribute.attnum > 0 ORDER BY 1,2 LIMIT 10; +------------------+----------------+---------------+--------------+-------------+ | dependent_schema | dependent_view | source_schema | source_table | column_name | +------------------+----------------+---------------+--------------+-------------+

IF EXISTS를 사용하여 테이블 삭제

다음 예에서는 FEEDBACK 테이블이 존재하는 경우에는 이를 삭제하고 존재하지 않는 경우에는 아무 작업도 수행하지 않고 메시지를 반환합니다.

drop table if exists feedback;