DETACH 

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

Синтаксис:

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

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

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

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

Обратите внимание, что нельзя перманентно отключить таблицу, которая уже временно отключена. Для этого ее сначала надо подключить обратно, а затем снова отключить перманентно.

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

Пример

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

Запрос:

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 doesn't exist.

Rating: 2 - 4 votes

Was this content helpful?
★★☆☆☆