Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Как использовать команду EXCHANGE, чтобы поменять таблицы местами

Вопрос

Как использовать команду EXCHANGE, чтобы поменять местами названия таблиц?

Ответ

Команда EXCHANGE полезна, когда нужно заменить текущую таблицу другой — временной таблицей, в которой, возможно, были изменены первичный ключ или другие настройки. В отличие от команды RENAME, это происходит атомарно. Она также полезна, если у вас есть materialized views, срабатывающие на исходной таблице, и вы хотите избежать пересоздания представления.

Ниже приведён простой пример того, как это работает и как это проверить:

  • Создайте тестовую базу данных
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 строка в наборе. Elapsed: 0.002 sec. 
Navigation