はじめに
テーブル名を変更するRENAMEコマンドをご紹介します。通常、テーブル名のRENAMEを行う際、1回のコマンドで1つのテーブルをRENAMEするのが一般的です。
Verticaでは、それに加えて1回のコマンドで複数のテーブルのRENAME処理をする事ができます。
例えば、データベースサーバでバッチ処理を行う際にテーブルの洗い替えを行うケースがありますが、
そのような場合に使える便利なコマンドです。
コマンド構文
・1つのテーブルのテーブル名を変更する場合
1 |
ALTER TABLE T1_old RENAME TO T1_new ; |
上記の例では、T1_oldという名前のテーブルをT1_newという名前に変更しています。
・複数のテーブルのテーブル名を変更する場合(基本編)
1 |
ALTER TABLE T1_old, T2_old RENAME TO T1_new, T2_new ; |
上記の例では、T1_oldとT2_oldいう名前の2つのテーブルを、T1_newとT2_newいう名前に変更しています。
・複数のテーブルのテーブル名を変更する場合(応用編)
1 |
ALTER TABLE T1, T1_work, temps RENAME TO temps, T1, T1_work ; |
上記の例では、実存しない一時的なテーブルであるtempsを使う事で、実存するテーブルであるT1とT1_workを1回のコマンドで入れ替えています。
以下の図は、これらの2つのテーブルをRENAMEさせるイメージを示しています。
先と同様に、1回のコマンドで複数のテーブルをRENAMEする事で、1つ1つのテーブルに対してRENAMEコマンドを発行する場合と比べて、コマンドの合間にできる僅かな空白をなくす事ができます。
注意事項
複数のテーブルをRENAMEする際の注意すべきポイントを以下にまとめます。・ALTER TABLEコマンドでリストするテーブルの順序
RENAME前のテーブルとRENAME後のテーブルをRENAMEコマンドにリストする際、そのテーブルの数と順序を一致させる必要があります。RENAME TOの後にリストするテーブル名には、スキーマ名を修飾する事はできません。同一のスキーマ内でのRENAME処理だけをVerticaが許可するためです。
・コマンドの構文にミスがあった状態で実行した場合、そのコマンドは部分的に実行される事はありません。例えば、コマンドに指定したRENAME前とRENAME後のテーブル数が一致しない状態で実行してしまった場合、テーブルがRENAMEされる事はありません。
・RENAMEをしても、プロジェクションとの関係性に影響はありません。プロジェクションはテーブルのOIDと紐付いていますので、テーブル名が変わってもプロジェクションとの関係に影響はありません。(最適化したプロジェクションの状態やユーザに付与したテーブルへの参照権限も継承されます。)
RENAME前のテーブルとRENAME後のテーブルをRENAMEコマンドにリストする際、そのテーブルの数と順序を一致させる必要があります。RENAME TOの後にリストするテーブル名には、スキーマ名を修飾する事はできません。同一のスキーマ内でのRENAME処理だけをVerticaが許可するためです。
・コマンドの構文にミスがあった状態で実行した場合、そのコマンドは部分的に実行される事はありません。例えば、コマンドに指定したRENAME前とRENAME後のテーブル数が一致しない状態で実行してしまった場合、テーブルがRENAMEされる事はありません。
・RENAMEをしても、プロジェクションとの関係性に影響はありません。プロジェクションはテーブルのOIDと紐付いていますので、テーブル名が変わってもプロジェクションとの関係に影響はありません。(最適化したプロジェクションの状態やユーザに付与したテーブルへの参照権限も継承されます。)
プロジェクションの命名ルール
9.3からRENAME後のテーブル名が、プロジェクション名に反映されるようになりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#### 9.2 以前 #### dbadmin=> ALTER TABLE table1 RENAME TO newtable1; ALTER TABLE dbadmin=> SELECT anchor_table_name, projection_basename, projection_name FROM projections WHERE anchor_table_name like '%table1%'; anchor_table_name | projection_basename | projection_name -------------------+---------------------+----------------- newtable1 | table1 | table1_b0 /* プロジェクション名に反映されない */ newtable1 | table1 | table1_b1 /* プロジェクション名に反映されない */ (2 rows) #### 9.3 以降 #### dbadmin=> ALTER TABLE table1 RENAME TO newtable1; ALTER TABLE dbadmin=> SELECT anchor_table_name, projection_basename, projection_name FROM projections WHERE anchor_table_name like '%table1%'; anchor_table_name | projection_basename | projection_name -------------------+---------------------+----------------- newtable1 | newtable1 | newtable1_b1 /* プロジェクション名に反映される */ newtable1 | newtable1 | newtable1_b0 /* プロジェクション名に反映される */ (2 rows) |
参考情報
Renaming Tableshttps://www.vertica.com/docs/9.3.x/HTML/Content/Authoring/AdministratorsGuide/Tables/ModifyTableDefinition/RenamingTables.htm
Projection Naming
https://www.vertica.com/docs/9.3.x/HTML/Content/Authoring/AdministratorsGuide/Projections/ProjectionNaming.htm
検証バージョンについて
この記事の内容はVertica 9.3で確認しています。更新履歴
2019/12/08 バージョン9.3リリース対応2016/12/28 本記事を公開