2.9 KiB
slug | sidebar_position | sidebar_label | title |
---|---|---|---|
/ja/sql-reference/statements/detach | 43 | DETACH | DETACH ステートメント |
テーブル、Materialized View、Dictionary、データベースの存在をサーバーに「忘れさせる」ためのコマンドです。
構文
DETACH TABLE|VIEW|DICTIONARY|DATABASE [IF EXISTS] [db.]name [ON CLUSTER cluster] [PERMANENTLY] [SYNC]
DETACHはテーブル、Materialized View、Dictionary、データベースのデータやメタデータを削除しません。エンティティがPERMANENTLY
でない場合、次回サーバー起動時にサーバーはメタデータを読み取り、再びテーブル/View/Dictionary/データベースを認識します。エンティティがPERMANENTLY
でDETACHされた場合は自動的に認識されません。
テーブル、Dictionary、データベースが恒久的にDETACHされたか否かにかかわらず、ATTACHクエリを使用して再アタッチできます。システムログテーブル(例: query_log
, text_log
など)も再アタッチ可能です。他のシステムテーブルは再アタッチできませんが、次回サーバー起動時にサーバーはこれらのテーブルを再認識します。
ATTACH MATERIALIZED VIEW
は短い構文(SELECT
なし)では動作しませんが、ATTACH TABLE
クエリを使用してアタッチすることができます。
既に一時的にDETACHされたテーブルを恒久的にDETACHすることはできません。ただし、一旦アタッチバックしてから再度恒久的にDETACHすることは可能です。
また、DETACHされたテーブルを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する:
クエリ:
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.
関連情報