跳到主要内容
跳到主要内容

DETACH 语句

使服务器“忘记”表、物化视图、字典或数据库的存在。

语法

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

分离不会删除表、物化视图、字典或数据库的数据或元数据。 如果实体不是 PERMANENTLY 分离的,则在下次服务器启动时,服务器将读取元数据并再次回忆起表/视图/字典/数据库。 如果实体是 PERMANENTLY 分离的,则不会自动回忆。

无论表、字典或数据库是否被永久分离,在这两种情况下,您都可以使用 ATTACH 查询重新附加它们。 系统日志表也可以重新附加(例如 query_logtext_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。 如果未使用此子句,则表将在集群重启时(例如在升级期间)重新附加。

参见