Перейти к основному содержанию
Перейти к основному содержанию

Оператор DETACH

Заставляет сервер «забыть» о существовании таблицы, материализованного представления, словаря или базы данных.

Синтаксис

DETACH TABLE|VIEW|DICTIONARY|DATABASE [IF EXISTS] [db.]name [ON CLUSTER cluster] [PERMANENTLY] [SYNC]

Отсоединение не удаляет данные или метаданные таблицы, материализованного представления, словаря или базы данных. Если объект не был отсоединён с параметром PERMANENTLY, при следующем запуске сервера он прочитает метаданные и снова восстановит таблицу/представление/словарь/базу данных. Если объект был отсоединён с параметром PERMANENTLY, автоматического восстановления не будет.

Независимо от того, была ли таблица, словарь или база данных отсоединена навсегда или нет, в обоих случаях вы можете повторно присоединить их с помощью запроса ATTACH. Системные таблицы логов также могут быть присоединены обратно (например, query_log, text_log и т.д.). Другие системные таблицы не могут быть повторно присоединены. При следующем запуске сервера он снова восстановит эти таблицы.

ATTACH MATERIALIZED VIEW не работает с коротким синтаксисом (без SELECT), но вы можете присоединить его с помощью запроса ATTACH TABLE.

Обратите внимание, что вы не можете навсегда отсоединить таблицу, которая уже отсоединена (временно). Но вы можете присоединить её обратно, а затем снова отсоединить навсегда.

Также вы не можете выполнить DROP для отсоединённой таблицы, или CREATE TABLE с тем же именем, что и у таблицы, отсоединённой навсегда, или заменить её другой таблицей с помощью запроса RENAME TABLE.

Модификатор SYNC выполняет действие без задержки.

Пример

Создание таблицы:

Запрос:

CREATE TABLE test ENGINE = Log AS SELECT * FROM numbers(10);
SELECT * FROM test;

Результат:

┌─number─┐
│      0 │
│      1 │
│      2 │
│      3 │
│      4 │
│      5 │
│      6 │
│      7 │
│      8 │
│      9 │
└────────┘

Отсоединение таблицы:

Запрос:

DETACH TABLE test;
SELECT * FROM test;

Результат:

Получено исключение от сервера (версия 21.4.1):
Код: 60. DB::Exception: Получено от localhost:9000. DB::Exception: Таблица default.test не существует.
Примечание

В ClickHouse Cloud пользователям следует использовать ключевое слово PERMANENTLY, например: DETACH TABLE <table> PERMANENTLY. Если его не использовать, таблицы будут снова подключены при перезапуске кластера, например во время обновления.

См. также