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

Команда 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;

Результат:

Received exception from server (version 21.4.1):
Code: 60. DB::Exception: Received from localhost:9000. DB::Exception: Table default.test does not exist.
примечание

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

См. также