[pgsql-jp: 41301] Re: viewを経由したINSERT処理について
Tomoaki Sato
sato @ sraoss.co.jp
2012年 12月 6日 (木) 23:40:27 JST
佐藤です。
> 高橋と申します
>
> viewを経由したinsert処理ができず困っています。
> 権限の設定が足りてない等、ご教授いただきたくお願い致します。
>
> <環境>
> ・OS:Linux
> ・Postgresバージョン:9.1
> ・DBの文字コード:UTF-8
> <設定手順>
> 【手順1】以下のユーザを作成
> →ent01、ent02
> →enterprisedb(スーパーユーザ)
> 【手順2】スキーマ作成
> →「enterprisedb」ユーザで「ent01」スキーマを作成
> →「enterprisedb」ユーザで「ent02」スキーマを作成
> 【手順3】テーブル作成
> →「enterprisedb」ユーザでpsqlにログインし、以下のテーブルを作成
> create table entr02.TB_SAMPLE;
> 【手順4】view作成
> →「enterprisedb」ユーザでpsqlにログインし、以下のviewを作成
> create view ent01.TB_SAMPLE as select * from ent02.TB_SAMPLE;
> 【手順5】権限設定
> 以下の権限を設定
> →grant all privileges on schema ent01 to ent01;
> →grant all privileges on schema ent02 to ent02;
> →grant all privileges on schema ent02 to ent01;
> →grant all privileges on schema ent01 to ent02;
> →alter default privileges in schema ent01 grant all on tables to ent01;
> →alter default privileges in schema ent02 grant all on tables to ent02;
> →alter default privileges in schema ent02 grant all on tables to ent01;
> →alter default privileges in schema ent01 grant all on tables to ent02;
> 【手順6】ルール設定
> 以下のルールを設定
> →「enterprisedb」ユーザでpsqlにログインし、以下のviewを作成
> create rule rule1 as on insert to ent01.TB_SAMPLE do instead nothing;
> ※inseteadの後に特定のinsert文を入れるのでなく、nothingにして汎
> 用的にinsert文を使用する。
> ※このruleを設定しなかった場合、insert時にエラーとなり、HINTで無
> 条件のON INSERT DO INSTEADルールもしくはINSTEAD OF INSERTトリ
> ガーが必要ですが出力される。
> 以上の手順を踏まえれば、ent02スキーマ内に作成したTB_SAMPLEテーブルを、
> ent01スキーマ内に作成したTB_SAMPLEビュー経由でinsert処理が行える想定
> でした。が、実際にent01ユーザでpsqlにログインして以下のinsert文を発行
> したところ、、
> insert into TB_SAMPLE values ('値',''値');
> INSERT 0 0
> 権限エラーにはなりませんが、insert結果0件でデータベースに書き込みされ
> ませんでした。
PostgreSQL の場合には、Oracle と違って単純なビューでもルールを定義しな
いと、ビューに対する更新はビューの対象となるテーブルに対して実行されま
せん。
上記では、ent01.TM_SAMPLE ビューに対して DO INSTEAD NOTHING ルールを定
義しているので、ビューに対する INSERT コマンドの実行が無効化されている
だけです。
ビューの更新については PostgreSQL のドキュメントを参照してみてください。
http://www.postgresql.jp/document/9.2/html/rules-update.html
> 設定漏れ等がございましたらご教授いただきたくお願い致します。
> 文章の説明で分かりづらいとは思いますが宜しくお願い致します。
----
Tomoaki Sato <sato @ sraoss.co.jp>
SRA OSS, Inc. Japan
pgsql-jp メーリングリストの案内