はじめに
9.1以前のバージョンでは、ビューの依存関係を確認できるシステムテーブルはありませんでした。バージョン9.2から実装されたview_tablesでは、ビュー関連の依存関係に関する情報が確認できます。
前提として、VerticaではビューのDROP時に依存関係をチェックしません。
そのため、ビューやテーブルの削除や名前変更にあたり、依存関係をチェックしておきたい時にはview_tablesを参照します。
view_tablesの概要
V_CATALOGスキーマに属するシステムテーブルです。ビューを参照するテーブル、そのスキーマ、所有者など、ビュー関連の依存関係に関する情報を確認できます。
確認できる情報は以下です。
カラム名 | データ型 | 説明 |
---|---|---|
TABLE_ID | INTEGER | ビューを一意に識別できる数値 |
TABLE_SCHEMA | VARCHAR | ビューが属するスキーマ名 |
TABLE_NAME | VARCHAR | ビュー名 |
REFERENCE_TABLE_ID | INTEGER | ビューが参照する表を一意に識別する数値 |
REFERENCE_TABLE_SCHEMA | VARCHAR | ビューが参照する表の属するスキーマ名 |
REFERENCE_TABLE_NAME | VARCHAR | ビューが参照するテーブル名 |
REFERENCE_TABLE_OWNER_ID | INTEGER | ビューの所有者を一意に識別する数値 |
確認例
ビューの依存関係の確認
1 2 3 4 5 |
dbadmin=> SELECT * FROM view_tables WHERE reference_table_name = 'tbl_test'; table_id | table_schema | table_name | reference_table_id | reference_table_schema | reference_table_name | reference_table_owner_id -------------------+--------------+------------+--------------------+------------------------+----------------------+-------------------------- 45035996273834744 | public | vw_test | 45035996273834728 | public | tbl_test | 45035996273704962 (1 row) |
reference_table_name列を確認すると、vw_testビューがtbl_testテーブルを参照していることが分かります。
現在tbl_testテーブルは存在しているため、table_schemaやreference_table_idに値が入っています。
※イメージ図
tbl_testテーブルを削除した場合
テーブルを削除
1 2 |
dbadmin=> DROP TABLE tbl_test; DROP TABLE |
view_tablesを確認
1 2 3 4 5 |
dbadmin=> SELECT * FROM view_tables WHERE reference_table_name = 'tbl_test'; table_id | table_schema | table_name | reference_table_id | reference_table_schema | reference_table_name | reference_table_owner_id -------------------+--------------+------------+--------------------+------------------------+----------------------+-------------------------- 45035996273834716 | public | vw_test | | | tbl_test | (1 row) |
reference_table_nameに表示されているtbl_testテーブルは実際には存在しないため、reference_table_id 、reference_table_schema、reference_table_owner_idがNULLとなっているのが分かります。
vw_testにSELECT文を実行
1 2 |
dbadmin=> SELECT * FROM vw_test; ERROR 4568: Relation "public.tbl_test" does not exist |
vw_testビューは、tbl_testテーブルを参照しようとするため、この問合せは失敗します。
参考情報
view_tableshttps://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/SystemTables/CATALOG/VIEW_TABLES.htm
DROP VIEW
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Statements/DROPVIEW.htm
V_CATALOG Schema
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/SystemTables/CATALOG/V_CATALOGSchema.htm