[pgsql-jp: 27949] Re: view/rule/insert

Satoshi Nagayasu snaga @ snaga.org
2002年 11月 12日 (火) 15:44:59 JST


永安です。

Mashiki <mashiki @ yanah.com> wrote:
> 永安さんの戦っているシビアな世界では通用しないかも知れませんが、
> あろうが無かろうが、(エラーなしに?)insertしてみる方法のひとつです。

全然シビアじゃないです…。
基本的に、まともにアプリケーション作った経験がほとんどないので、
いざ作ろうとすると、こういう基本的なところで疑問続出です…。

> sql=# insert into c1 select 'aaa'
>       where not exists (
>         select 1 from c1 where c1_name='aaa'
>       );
>   INSERT 0 0
> 
> sql=# insert into c1 select 'bbb'
>       where not exists (
>         select 1 from c1 where c1_name='bbb'
>       );
>   INSERT 0 0
> 
> はエラーを出しません。もちろん、以下はインサートも成功します。
> 
> sql=# insert into c1 select 'ccc' where not exists (
>         select 1 from c1 where c1_name='ccc'
>       );
>   INSERT 22734848 1
> 
> クォートの中を「new.c1_name」としたら、ルール中でも使えないでしょうか。

なるほど。こういう書き方があったんですね。ううむ。

> そもそも、こんなやり方ではタイミングでキーがかち合うこともあるのかな?

確かに、exists の select をした直後に他のトランザクションで同じ
キーを入れられると、duplicate key になりそうですね。

でも、まぁそれは気にしないことにします。
多分、私しか使わない研究用のシステムなので。:-)

-- 
NAGAYASU Satoshi <snaga @ snaga.org>




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