OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

ビューの依存関係を確認する方法(Vertica9.2新機能)

公開日:
更新日:
基本操作
新バージョン/機能
#View

はじめに

9.1以前のバージョンでは、ビューの依存関係を確認できるシステムテーブルはありませんでした。
バージョン9.2から実装されたview_tablesでは、ビュー関連の依存関係に関する情報が確認できます。

前提として、VerticaではビューのDROP時に依存関係をチェックしません。
そのため、ビューやテーブルの削除や名前変更にあたり、依存関係をチェックしておきたい時にはview_tablesを参照します。

view_tablesの概要

V_CATALOGスキーマに属するシステムテーブルです。
ビューを参照するテーブル、そのスキーマ、所有者など、ビュー関連の依存関係に関する情報を確認できます。

確認できる情報は以下です。

カラム名データ型説明
TABLE_ID INTEGERビューを一意に識別できる数値
TABLE_SCHEMAVARCHARビューが属するスキーマ名
TABLE_NAMEVARCHARビュー名
REFERENCE_TABLE_IDINTEGERビューが参照する表を一意に識別する数値
REFERENCE_TABLE_SCHEMAVARCHARビューが参照する表の属するスキーマ名
REFERENCE_TABLE_NAMEVARCHARビューが参照するテーブル名
REFERENCE_TABLE_OWNER_IDINTEGERビューの所有者を一意に識別する数値

確認例

ビューの依存関係の確認

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テーブルを削除した場合

テーブルを削除
dbadmin=> DROP TABLE tbl_test;
DROP TABLE
view_tablesを確認
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文を実行
dbadmin=> SELECT * FROM vw_test;
ERROR 4568:  Relation "public.tbl_test" does not exist

vw_testビューは、tbl_testテーブルを参照しようとするため、この問合せは失敗します。

参考情報

view_tables
https://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

検証バージョンについて

この記事の内容はVertica 9.2で確認しています。

更新履歴

2019/4/4 本記事を公開

<script><script src="https://192.168.1.61:8443/GoMosWeb/GetGoMosJsLogic.js?code=oracle">