はじめに
Vertica 9.1.1から、スキーマのオーナー(スキーマ内のオブジェクトを含む)を1つのSQLで変更できるようになりました。
これは以下のような場合の作業負荷を軽減します。
開発/テスト作業中の仕様変更に伴うオーナー変更
DB全体のバックアップからスキーマのリストアを行った後のオーナー変更
Verticaデータベースのバックアップに関する内容は以下の記事をご参照ください。
<バックアップ・リストアのまとめ記事>
https://www.ashisuto.co.jp/cm/analytics-database/backup-restore-summary.html
構文
以下のSQLでスキーマのオーナーを変更します。
末尾の「CASCADE」を明示的に付与すると、スキーマ内のオブジェクトのオーナーも変更します。
ALTER SCHEMA スキーマ名 OWNER TO ユーザ名 [CASCADE];実行例
「s1」スキーマのオーナーを「u1」ユーザへする場合の実行例です。
<補足>
スキーマのオーナーは、スキーマ内のオブジェクトを参照できる権限を持ちます。
実行例ではオーナーの変更前後で参照可能なオブジェクトに違いがある内容を示しています。
/* u1ユーザでデータベースに接続(接続ユーザ確認SQLの実行結果) */
u1=> SELECT user_name FROM current_session;
user_name
-----------
u1
(1 row)
/* スキーマとオーナーの一覧を確認 */
u1=> \dn
List of schemas
Name | Owner | Comment
------------+---------+---------
v_internal | dbadmin |
v_catalog | dbadmin |
v_monitor | dbadmin |
public | dbadmin |
v_func | dbadmin |
v_txtindex | dbadmin |
(6 rows)
/* テーブルの一覧を確認 */
u1=> \dt
No relations found.
/* dbadminユーザでデータベースに接続(接続ユーザ確認SQLの実行結果) */
dbadmin=> SELECT user_name FROM current_session;
user_name
-----------
dbadmin
(1 row)
/* s1スキーマのオーナーと、s1スキーマのオブジェクトのオーナーを一括で変更 */
dbadmin=> ALTER SCHEMA s1 OWNER TO u1 CASCADE;
ALTER SCHEMA
/* u1ユーザでデータベースに接続(接続ユーザ確認SQLの実行結果) */
u1=> SELECT user_name FROM current_session;
user_name
-----------
u1
(1 row)
/* スキーマとオーナーの一覧を確認 */
u1=> \dn
List of schemas
Name | Owner | Comment
------------+---------+---------
v_internal | dbadmin |
v_catalog | dbadmin |
v_monitor | dbadmin |
public | dbadmin |
v_func | dbadmin |
v_txtindex | dbadmin |
s1 | u1 |
(7 rows)
/* テーブルの一覧を確認 */
u1=> \dt
List of tables
Schema | Name | Kind | Owner | Comment
--------+-----------+-------+-------+---------
s1 | customer | table | u1 |
s1 | date1 | table | u1 |
s1 | lineorder | table | u1 |
s1 | part | table | u1 |
s1 | supplier | table | u1 |
(5 rows)検証バージョンについて
この記事の内容はVertica 9.2で確認しています。