[pgsql-jp: 26125] Re: トランザクション内でのレコードの削除
ISHIDA Akio
iakio @ pjam.jpweb.net
2002年 5月 24日 (金) 20:15:15 JST
石田です。
On Fri, May 24, 2002 at 06:19:35PM +0900, Hiroshi Inoue wrote:
> 井上です。
> >
> > この後、select * from t1; すると、
> > i | j
> > ---+---
> > 1 | a
> > (1 row)
> >
> > となります。
> >
> > つまり、b=> が update した時点では、 j = 'a' に該当する
> > レコードがあるはずなのに、update ができないようです。
> > この現象は正常な動きでしょうか?
>
> PostgreSQLではupdateコマンドが発行された時点で(厳密
> にいうと少し違いますが)存在しなかったデータは処理の
> 対象となりません。この動作が残念ながら好ましくないと
> してもそれを修正するのは容易ではありません。
なるほど。ありがとうございます。
この件は、明示的にテーブルを LOCK をすることで期待した
動作をすることができました。
a=> begin;
a=> lock t1 in share mode;
a=> delete from t1;
a=> insert into t1 values (1, 'a');
b=> begin;
b=> update t1 set i = 2 where j = 'a';
a=> commit;
b=> commit;
a=> select * from t1;
i | j
---+---
2 | a
(1 row)
--
ISHIDA Akio
pgsql-jp メーリングリストの案内