テーブルにエイリアス(別名)を付与する方法
Verticaにはシノニム(synonym)はありません。テーブルに対するエイリアス(別名)を付与したい場合は、ビューを使用します。
例えばpublic.table1テーブルに別名(kka1.v1)を付与したい場合は以下のようにCREATE VIEWを使用します。
1 2 |
dbadmin=> CREATE VIEW kka1.v1 AS SELECT * FROM public.table1; CREATE VIEW |
これにより、public.table1、kka1.v1 どちらを検索した場合でも同じ結果を得ることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
dbadmin=> SELECT * FROM public.table1; 日付 | 顧客ID | 店舗 | エリア | 売上高 ------------+--------+--------+--------+-------- 2013-07-01 | 10001 | 新宿 | 東京 | 100 2013-07-03 | 10004 | 梅田 | 大阪 | 2400 2014-07-01 | 10002 | 新宿 | 東京 | 1000 2014-07-03 | 10005 | 池袋 | 東京 | 1600 2015-07-02 | 10003 | 名古屋 | 名古屋 | 10000 2015-07-03 | 10006 | 新宿 | 東京 | 6400 2014-07-06 | 10008 | 梅田 | 大阪 | 1100 2013-07-05 | 10007 | 品川 | 東京 | 1000 2015-07-06 | 10009 | 名古屋 | 名古屋 | 1300 dbadmin=> SELECT * FROM kka1.v1; 日付 | 顧客ID | 店舗 | エリア | 売上高 ------------+--------+--------+--------+-------- 2013-07-05 | 10007 | 品川 | 東京 | 1000 2015-07-06 | 10009 | 名古屋 | 名古屋 | 1300 2014-07-06 | 10008 | 梅田 | 大阪 | 1100 2013-07-01 | 10001 | 新宿 | 東京 | 100 2013-07-03 | 10004 | 梅田 | 大阪 | 2400 2014-07-01 | 10002 | 新宿 | 東京 | 1000 2014-07-03 | 10005 | 池袋 | 東京 | 1600 2015-07-02 | 10003 | 名古屋 | 名古屋 | 10000 2015-07-03 | 10006 | 新宿 | 東京 | 6400 |
また、ビューには権限を付与できるため、セキュリティ目的でも利用できます。
例)参照用ユーザ(kka1)にはpublic.table1テーブルは参照させず、kka1.v1ビューを参照させたい場合
現在public.table1、kka1.v1ともに所有者(Owner)はdbadminユーザのため、デフォルトではkka1ユーザはどちらも参照することができません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
dbadmin=> \d List of tables Schema | Name | Kind | Owner | Comment --------+--------+-------+---------+--------- public | table1 | table | dbadmin | dbadmin=> \dv List of views Schema | Name | Owner | Comment --------+------+---------+--------- kka1 | v1 | dbadmin | kka1=> SELECT * FROM public.table1; ERROR 4367: Permission denied for relation table1 kka1=> SELECT * FROM kka1.v1; ERROR 4367: Permission denied for relation v1 |
kka1.v1のみ参照権限を与える場合は、以下のようにGRANT文を実行します。
v1ビューが存在するkka1スキーマに対するUSAGE権限を付与します。
1 2 |
dbadmin=> GRANT USAGE ON SCHEMA kka1 TO kka1; GRANT PRIVILEGE |
v1ビューに対するSELECT(参照)権限を付与します。
1 2 |
dbadmin=> GRANT SELECT ON TABLE kka1.v1 TO kka1; GRANT PRIVILEGE |
上記の権限を付与することで、kka1ユーザはkka1.v1ビューの参照が可能になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
kka1=> SELECT * FROM public.table1; ERROR 4367: Permission denied for relation table1 kka1=> SELECT * FROM kka1.v1; 日付 | 顧客ID | 店舗 | エリア | 売上高 ------------+--------+--------+--------+-------- 2013-07-05 | 10007 | 品川 | 東京 | 1000 2015-07-06 | 10009 | 名古屋 | 名古屋 | 1300 2013-07-01 | 10001 | 新宿 | 東京 | 100 2013-07-03 | 10004 | 梅田 | 大阪 | 2400 2014-07-01 | 10002 | 新宿 | 東京 | 1000 2014-07-03 | 10005 | 池袋 | 東京 | 1600 2015-07-02 | 10003 | 名古屋 | 名古屋 | 10000 2015-07-03 | 10006 | 新宿 | 東京 | 6400 2014-07-06 | 10008 | 梅田 | 大阪 | 1100 |
参考情報
作成したビューの詳細情報を確認する方法http://vertica-tech.ashisuto.co.jp/views/