Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

DETACH

使服务器“忘记”某个表、materialized view、字典或数据库的存在。

语法

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

分离不会删除表、materialized view、字典或数据库的数据或元数据。如果某个实体不是以 PERMANENTLY 方式分离的,那么服务器下次启动时会读取元数据,并重新加载该表/视图/字典/数据库。如果某个实体是以 PERMANENTLY 方式分离的,则不会自动重新加载。

无论表、字典或数据库是否被永久分离,这两种情况下都可以使用 ATTACH 查询将其重新附加。 系统日志表也可以重新附加 (例如 query_logtext_log 等) 。其他系统表无法重新附加。不过在服务器下次启动时,服务器仍会再次加载这些表。

ATTACH MATERIALIZED VIEW 不支持简写语法 (不带 SELECT) ,但可以使用 ATTACH TABLE 查询来附加它。

请注意,已经处于分离 (临时) 状态的表不能再被永久分离。不过,可以先将其重新附加,然后再以永久方式分离。

此外,不能对已分离的表执行 DROP,也不能 CREATE TABLE 一个与已永久分离的表同名的表,或者使用 RENAME TABLE 查询将其替换为另一张表。

SYNC modifier 会立即执行该操作,不会延迟。

示例

创建一个表:

Querysql
CREATE TABLE test ENGINE = MergeTree ORDER BY () AS SELECT * FROM numbers(10);
SELECT * FROM test;
Responsetext
┌─number─┐
│      0 │
│      1 │
│      2 │
│      3 │
│      4 │
│      5 │
│      6 │
│      7 │
│      8 │
│      9 │
└────────┘

分离表:

Querysql
DETACH TABLE test;
SELECT * FROM test;
Responsetext
Received exception from server (version 21.4.1):
Code: 60. DB::Exception: Received from localhost:9000. DB::Exception: Table default.test does not exist.

另请参阅

Navigation