分离一个表、物化视图、字典或数据库。
语法
DETACH TABLE|VIEW|DICTIONARY|DATABASE [IF EXISTS] [db.]name [PERMANENTLY] [SYNC]
分离操作不会删除表、物化视图、字典或数据库的数据或元数据。如果实体未被永久分离,在下次服务器启动时,服务器将读取元数据并重新识别表/视图/字典/数据库。如果实体被永久分离,则不会自动重新识别。
无论表、字典或数据库是否被永久分离,都可以使用 ATTACH 查询重新附加它们。系统日志表(例如 query_log、text_log 等)也可以重新附加。其他系统表不能重新附加。在下次服务器启动时,服务器将重新识别这些表。
请注意,不能永久分离已经分离的表(临时)。但可以先重新附加,然后再次永久分离。
此外,不能删除已分离的表,也不能创建与永久分离的表同名的表,也不能使用 RENAME TABLE 查询将其替换为其他表。
SYNC 修饰符立即执行操作。
示例
创建表:
CREATE TABLE db1.test (i Int64) ENGINE = CnchMergeTree() ORDER BY i INSERT INTO db1.test SELECT number FROM numbers(10); SELECT * FROM db1.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.