[pgsql-jp: 41300] viewを経由したINSERT処理について

takart32 @ yahoo.co.jp takart32 @ yahoo.co.jp
2012年 12月 6日 (木) 22:38:05 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件でデータベースに書き込みされませんでした。

設定漏れ等がございましたらご教授いただきたくお願い致します。
文章の説明で分かりづらいとは思いますが宜しくお願い致します。


pgsql-jp メーリングリストの案内