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

Tomoaki Sato sato @ sraoss.co.jp
2012年 12月 7日 (金) 22:15:18 JST


佐藤です。

From: takart32 @ yahoo.co.jp
Date: Fri, 7 Dec 2012 11:29:04 +0900 (JST)

> ご教授いただきありがとうございます。
> 
>> 上記では、ent01.TM_SAMPLE ビューに対してDO INSTEAD NOTHING ルールを定
>> 義しているので、ビューに対するINSERT コマンドの実行が無効化されている
>> だけです。
> 
>   →勉強不足で申し訳ございません。NOTHING指定だとINSERT処理を無効化し
>     てまうのですね。マニュアルをよく読んでませんでした。
> 
>     マニュアルの中で、「DO INSTEAD INSER構文」と定義することで、指定
>     した特定のINSERT処理については実行できるところまでは確認致しまし
>     た。
>     が、今回やりたいどんなINSERT処理についてもエラーとならず実行でき
>     る汎用的な設定については、記述がございませんでした。
>     「全てのINSERT構文の実行を許す」的なルールは作成できるのでしょう
>     か?

具体的にどのようなビューに対してどのような INSERT を実行しようとしてい
るのでしょうか。

>>>       create view ent01.TB_SAMPLE as select * from ent02.TB_SAMPLE;

といったビューなら

CREATE RULE ent01.tb_sample_ins AS ON INSERT TO ent01.tb_sample
    DO INSTEAD
    INSERT INTO ent02.tb_sample VALUES (
        new.col1, new.col2, new.col3, ...
    );

といったルールで問題ないと思うのですが。

>     Notifyに関する記述もあり試してみましたがNGでした。
>     CREATE RULE notify_me AS ON insert TO ent01.TB_SAMPLE
>     DO INSTEAD NOTIFY TB_SAMPLE;
>     勉強不足で至らない点が多く申し訳ございませんが宜しくお願い致します。

NOTIFY はデータベース内で非同期通信を行う仕組みなので関係ないです。


----
Tomoaki Sato <sato @ sraoss.co.jp>
SRA OSS, Inc. Japan


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