跳至主要内容

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.

另请参阅