메인 콘텐츠로 건너뛰기

질문

EXCHANGE 명령을 사용해 테이블 이름을 서로 바꾸려면 어떻게 해야 하나요?

답변

EXCHANGE 명령은 현재 테이블을 프라이머리 키나 기타 설정이 업데이트되었을 수 있는 임시 테이블과 교체해야 할 때 유용합니다. 이는 RENAME 명령과 달리 원자적으로 수행됩니다. 또한 원본 테이블에서 materialized view가 트리거되는 경우, 뷰를 다시 빌드하지 않으려는 때에도 유용합니다. 아래는 작동 방식과 테스트 방법을 보여주는 간단한 예시입니다:
  • 예시 데이터베이스 생성
create database db1;
  • 예시 테이블을 생성하세요
create table db1.table1_exchange
(
 id Int32,
 string_field String
)
engine = MergeTree()
order by id;
  • 예시 행을 삽입합니다
insert into db1.table1_exchange
values
(1, 'a');
  • EXCHANGE할 예시 임시 테이블을 생성합니다
create table db1.table1_exchange_temp
(
 id Int32,
 string_field String
)
engine = MergeTree()
order by id;
  • 임시 테이블에 샘플 행을 삽입합니다
insert into db1.table1_exchange_temp
values
(2, 'b');
  • 테이블을 서로 바꾸려면 EXCHANGE 명령을 실행하세요
exchange tables db1.table1_exchange and db1.table1_exchange_temp;
  • 이제 테이블이 서로 교환되었는지 확인하고 행이 바뀐 것을 보여줍니다
select * from db1.table1_exchange;
┌─id─┬─string_field─┐
│  2 │ b            │
└────┴──────────────┘

1 row in set. Elapsed: 0.002 sec. 
마지막 수정일 2026년 6월 10일