DROP INDEX — 인덱스 삭제하기
DROP INDEX — 인덱스 삭제하기
DROP INDEX은 데이터베이스에서 이미 존재하는 인덱스를 제거하는 명령이에요. 인덱스의 소유자만 실행할 수 있습니다. CONCURRENTLY 옵션을 쓰면 테이블을 잠그지 않고 삭제할 수 있지만, 몇 가지 제약이 따르니 상황에 맞게 골라야 해요.
출처: PostgreSQL 문서
본문
Synopsis
DROP INDEX [ CONCURRENTLY ] [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
Description
DROP INDEX은 데이터베이스 시스템에서 이미 존재하는 인덱스를 삭제해요. 이 명령을 실행하려면 인덱스의 소유자여야 합니다.
Parameters
- CONCURRENTLY — 인덱스 테이블에 대한 동시성 select, insert, update, delete를 잠그지 않고 인덱스를 삭제해요. 일반
DROP INDEX는 테이블에 ACCESS EXCLUSIVE 잠금을 획득해 인덱스 삭제가 끝날 때까지 다른 접근을 막습니다. 이 옵션을 쓰면 대신 충돌하는 트랜잭션이 끝날 때까지 명령이 기다려요.- 이 옵션을 쓸 때 알아둬야 할 주의사항이 몇 가지 있어요. 인덱스 이름은 하나만 지정할 수 있고,
CASCADE옵션은 지원되지 않습니다. (따라서UNIQUE나PRIMARY KEY제약을 뒷받침하는 인덱스는 이 방식으로 삭제할 수 없어요.) 또한 일반DROP INDEX명령은 트랜잭션 블록 안에서 실행할 수 있지만,DROP INDEX CONCURRENTLY는 그럴 수 없어요. 마지막으로 분할(partitioned) 테이블의 인덱스는 이 옵션으로 삭제할 수 없습니다. - 임시 테이블의 경우 다른 세션이 접근할 수 없고, 비동시성 삭제가 더 저렴하기 때문에
DROP INDEX가 항상 비동시성(non-concurrent)으로 동작해요.
- 이 옵션을 쓸 때 알아둬야 할 주의사항이 몇 가지 있어요. 인덱스 이름은 하나만 지정할 수 있고,
- IF EXISTS — 인덱스가 존재하지 않아도 오류를 던지지 않아요. 이 경우에는 통지(notice)만 발행됩니다.
- name — 제거할 인덱스의 이름(스키마 한정 가능).
- CASCADE — 인덱스에 의존하는 객체와, 나아가 그 객체들에 의존하는 모든 객체를 자동으로 함께 삭제해요 (5.15절 참고).
- RESTRICT — 인덱스에 의존하는 객체가 있으면 삭제를 거부해요. 이게 기본값이에요.
Examples
이 명령은 title_idx 인덱스를 제거해요.
DROP INDEX title_idx;
Compatibility
DROP INDEX는 PostgreSQL 언어 확장이에요. SQL 표준에는 인덱스에 대한 조항이 없습니다.