使服务器“忘记”某个表、materialized view、字典或数据库的存在。
语法
DETACH TABLE|VIEW|DICTIONARY|DATABASE [IF EXISTS] [db.]name [ON CLUSTER cluster] [PERMANENTLY] [SYNC]分离不会删除表、materialized view、字典或数据库的数据或元数据。如果某个实体不是以 PERMANENTLY 方式分离的,那么服务器下次启动时会读取元数据,并重新加载该表/视图/字典/数据库。如果某个实体是以 PERMANENTLY 方式分离的,则不会自动重新加载。
无论表、字典或数据库是否被永久分离,这两种情况下都可以使用 ATTACH 查询将其重新附加。
系统日志表也可以重新附加 (例如 query_log、text_log 等) 。其他系统表无法重新附加。不过在服务器下次启动时,服务器仍会再次加载这些表。
ATTACH MATERIALIZED VIEW 不支持简写语法 (不带 SELECT) ,但可以使用 ATTACH TABLE 查询来附加它。
请注意,已经处于分离 (临时) 状态的表不能再被永久分离。不过,可以先将其重新附加,然后再以永久方式分离。
此外,不能对已分离的表执行 DROP,也不能 CREATE TABLE 一个与已永久分离的表同名的表,或者使用 RENAME TABLE 查询将其替换为另一张表。
SYNC modifier 会立即执行该操作,不会延迟。
示例
创建一个表:
CREATE TABLE test ENGINE = MergeTree ORDER BY () 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.另请参阅