[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 メーリングリストの案内